標籤:qt 行動裝置 App開發 windows phone 8
讓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程式很容易罷工。如果qtd3dservice程式一直顯示qt.d3dservice:Unable to get remote directory info: "?????",那麼可能是上面的步驟出錯了,或者是其它未知的錯誤。總之,刪除構建的目錄,從第四步開始重新來一遍吧。
總結
Qt的Windows Phone套件還不完善,主要體現在兩點:1、線上編譯shader需要qtd3dservice,給我們開發增加了麻煩,測試回合的時候一定要運行該程式,還容易罷工。對此計劃在Qt 5.4中去除該程式;2、不能完全脫離Visual Studio進行開發,雖然Qt Creator可以直接運行程式,但是不是無法顯示介面(缺少qtd3dservice運行)就是字型顯示方塊。字型顯示方塊這個問題源自於winrtrunner這個程式預設定義需要打包的程式尾碼沒有.ttf,並且Qt Creator無法為Windows Phone套件產生一個map檔案。為此我在jira上提出了bug,希望他們能在下一個版本中解決問題。
實拍運行:
讓Qt for Windows Phone 8.1在真機上運行