让Qt for Windows Phone 8.1在真机上执行

前面几篇博文是为这篇文章做铺垫的,终于目的为的是使用Qt框架制作出可以在Windows Phone 8.1真机上执行的程序。因为Qt for WP8这一块不完好,在加上我刚进入这一领域,所以研究的速度有点儿慢。在网上询问了Qt项目的维护者,加上自己的一点研究,略微了解了Qt for Windows Phone 8的开发原理。

原创文章,反对未声明的引用。原博客地址:http://blog.csdn.net/gamesdev/article/details/38967749

使用Qt开发Windows Phone 8应用而且可以执行在真机上,在前一篇文章的基础上,须要注冊开发人员账号,而且解锁手机,这样才干顺利地进行开发。

这里须要配合的软件是QtSDK for Windows RunTime、Qt Creator3.1.2(绑定在Qt for Windows RunTime中)以及Visual Studio 2012以上版本号(含)。

让Widgets程序在Windows Phone 8.1真机上执行

我们先从简单的Widgets程序開始讲起。打开QtCreator,创建一个Widgets程序。然后在main函数中输入这些代码:

#include <QApplication>
#include <QWidget>
#include <QLabel>
#include <QBoxLayout> int main( int argc, char** argv )
{
QApplication app( argc, argv ); QLabel* pLabel = new QLabel( QObject::tr( "Hello Windows Phone 8" ) ); QHBoxLayout* pHLayout = new QHBoxLayout;
pHLayout->addStretch( );
pHLayout->addWidget( pLabel );
pHLayout->addStretch( ); QVBoxLayout* pVLayout = new QVBoxLayout;
pVLayout->addLayout( pHLayout ); QWidget widget;
widget.setStyleSheet( "background-color: #FF0000FF" );
widget.setLayout( pVLayout );
widget.showFullScreen( ); return app.exec( );
}

使用桌面套件,执行,是这种结果:

好。接下来介绍如何移植到Windows Phone 8.1平台上。选择套件为Windows Phone 8,然后在“构建”这一栏加入自己定义的构建步骤,例如以下图。

当中命令是qmake,參数是-tp vc%{sourceDir}/%{CurrentProject:Name}.pro "CONFIG+=windeployqt",工作文件夹是%{buildDir},目的是生成VisualStudio项目,让VS继续构建。

然后在%{buildDir}中找到vcxproj文件,用VisualStudio打开。选择deploy将其部署在手机上,然后从手机上执行,就大功告成了。就这么简单。

让Quick程序在真机上执行

接下来介绍一下QtQuick程序怎样在Windows Phone 8.1真机上执行。

1、相同地,建立一个Qt Quick项目:

我们先用桌面套件执行一下,是这种效果:

2、(可选)在pro文件里设置字体。

QtCreator在默认不设置字体FONTS的情况下,会将全部的字体打包在xap文件里,这种话,xap包文件至少有10M了,降低不必要的字体,能够将包大小降低到8M左右。我这里是这样设置FONTS的:

FONTS=$$[QT_INSTALL_BINS]/fonts/DejaVuSans.ttf

我们能够在$$[QT_INSTALL_BINS]/fonts中找到全部可用的字体,当然你能够加入你喜欢的字体,假设不设置的话,这些字体都会被打包。所以设置FONTS为一个有效的字体就好了,但假设设置FONTS=,就会造成无字体可用,执行的程序会出现一个个方块。

3、为项目加入自己定义处理步骤。

这里方法和构建Widgets程序的一样。

4、构建。

在%{buildDir}中找到vcxproj文件,用Visual Studio打开。

5、用Visual Studio构建。

然后打开$${QTDIR}/bin/qtd3dservice程序,它会使用在线编译着色器。借着部署(deploy),记住部署步骤一定要在打开qtd3dservice程序之后。

6、执行

如今程序已经在手机上了,这时不要关闭qtd3dservice,执行程序,就能够看到结果了。

qtd3dservice程序非常easy罢工。假设qtd3dservice程序一直显示qt.d3dservice:Unable to get remote directory info: "?????",那么可能是上面的步骤出错了,或者是其他未知的错误。总之,删除构建的文件夹,从第四步開始又一次来一遍吧。

总结

Qt的Windows Phone套件还不完好,主要体如今两点:1、在线编译shader须要qtd3dservice,给我们开发添加了麻烦,測试执行的时候一定要执行该程序,还easy罢工。对此计划在Qt 5.4中去除该程序;2、不能全然脱离Visual Studio进行开发,尽管Qt Creator能够直接执行程序,可是不是无法显示界面(缺少qtd3dservice执行)就是字体显示方块。字体显示方块这个问题源自于winrtrunner这个程序默认定义须要打包的程序后缀没有.ttf,而且Qt
Creator无法为Windows Phone套件生成一个map文件。为此我在jira上提出了bug,希望他们能在下一个版本号中解决这个问题。

实拍执行:

让Qt for Windows Phone 8.1在真机上执行的更多相关文章

  1. Qt在Windows下的三种编程环境搭建

    尊重作者,支持原创,如需转载,请附上原地址:http://blog.csdn.net/libaineu2004/article/details/17363165 从QT官网可以得知其支持的平台.编译器 ...

  2. Qt for Windows:Qt 5.4.0 MinGW 静态编译版本制作 (转)

    大致流程: 1.安装Qt(源码版)以及其他必要的环境 2.编译/安装 3.配置 4.使用 ----------正文分割线---------- 1.安装Qt(源码版) 1.1 下载Qt(两个地址二选一即 ...

  3. QT在windows下的安装与配置

    先了解Qt: Qt一直以来,分为商业.开源两个版本,商业版本为用户提供了二级制的动态库,直接安装既可以使用,但是需要花钱购买license,而开源版本则遵守GPL协议,提供了源码,用户需要自行编译,才 ...

  4. Qt实现Windows远程控制

    实现方式为server端+client. server端为一个进程.client为图形界面程序. client连接时设置server端的Ip地址,以及须要显示的长度和宽度(不能超过相应server端显 ...

  5. Qt for windows消息循环、libqxt分析和wince快捷键处理

    Qt for windows消息循环.libqxt分析和wince快捷键处理 利用Qt做windows图形界面开发和MFC相比,个人感觉还是比较简单好用的:首先利用Designer工具搞个ui文件:然 ...

  6. Qt在Windows下的三种编程环境搭建(图文并茂,非常清楚)good

    尊重作者,支持原创,如需转载,请附上原地址:http://blog.csdn.net/libaineu2004/article/details/17363165 从QT官网可以得知其支持的平台.编译器 ...

  7. qt在windows下的udp通信(最简单)

    qt编程:windows下的udp通信 本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 环境: 主机:win7 开发环境:qt 功能: 用udp进行收发 ...

  8. 【Qt开发】Qt在Windows下的三种编程环境搭建

    从QT官网可以得知其支持的平台.编译器和调试器的信息如图所示: http://qt-project.org/doc/qtcreator-3.0/creator-debugger-engines.htm ...

  9. Windows Server 2008/2012 计划任务配置执行bat

    首先Windows Server 2008不同于其他服务器操作系统和Windows Server 2003有着很大的区别,计划任务的名称是“任务计划程序”不在控制面板里,而是在“管理工具”里.由于服务 ...

随机推荐

  1. checkbox,radio,selected相关操作

    1.radio:单选框 HTML代码: <input type="radio" name="radio" id="radio1" va ...

  2. Android服务之AIDL

    在android开发过程中,为了让其他的应用程序,也可以访问本应用程序的服务,android系统采用远程过程调用来实现.android通过接口来公开定义的服务.我们将能够夸进程访问的服务成为AIDL服 ...

  3. IT运维外包甩不掉的包袱

    对一个企业的IT信息部门来说,保证IT系统的安全.稳定和可靠运行是IT部门义不容辞的职责,但IT系统的安全.稳定和可靠是相对的,得看企业IT投入和ROI.现在企业的IT系统运维面临着多重压力:一方面是 ...

  4. C语言undefined behaviour未定义行为

    C语言中的未定义行为(Undefined Behavior)是指C语言标准未做规定的行为.同时,标准也从没要求编译器判断未定义行为,所以这些行为有编译器自行处理,在不同的编译器可能会产生不同的结果,又 ...

  5. Sublime Text 3中使用正则表达式删除空行

    Sublime Text 3 中使用正则表达式删除空行 Ctrl+H Find What: \n\n+ Replace With:\n

  6. HTML5 自定义属性 data-*介绍

    在HTML5之前HTML4我们也可以自定义属性通过setAttribute去设置或者直接写在HTML标签里面那么HTML5新增data-*(*可以替换成你喜欢的任意名字)属性有什么用呢? 更便的捷操作 ...

  7. 2Sum,3Sum,4Sum,kSum,3Sum Closest系列

    1).2sum 1.题意:找出数组中和为target的所有数对 2.思路:排序数组,然后用两个指针i.j,一前一后,计算两个指针所指内容的和与target的关系,如果小于target,i右移,如果大于 ...

  8. sublime远程连接到linux主机

    sublime远程连接到linux主机 sublime远程连接到linux主机 微信开发,直接使用sublime的sftp功能修改wx_sample.php 1.为sublime安装安装包管理插件Pa ...

  9. IE6、7 a链接内图片加滤镜后导致a标签链接失效问题解决

    今天在项目中遇到一个ie6.7浏览器下a链接失效的问题,查询大量资料,最终找到完美的解决方案,如下: 解决方法: 为a标签加样式{*background:url(#);*zoom:1;} 为img外部 ...

  10. c#接口定义与应用

    public interface IBankAccount //只能加public修饰符,或者什么都不加 { void Playin(decimal money); //函数前不加任何修饰符号 boo ...