Visual Studio 環境準備
本文使用的WindowsMobile開發環境是Visual Studio 2008版本,要求在安裝VS2008的時候,一定要選擇安裝Visual C++ ,並且要選擇上智慧型裝置可程式化技術選項。如:
如果你已經安裝過VS2008,那麼只要從Windows的“添加/刪除程式”找到VisualStudio2008進入維護模式即可重新添加或者刪除VS2008的組件。
在VS2008安裝完成後,已經可以開發基於WindowsMobile5.0的應用程式了。不過現在Windows Mobile系列手機大多都已經是WindowsMobile6.0或者6.1以上的版本了,甚至已經不少手機玩家已經將手機刷成WindowsMobile6.5了。所以建議大家至少應該安裝一個WindowsMobile 6 的SDK。並且最好是可以安裝一個簡體中文版本,因為簡體中文版本裡的裝置模擬器裡的WindowsMobile是中文版本的,如果用英文版本裝置模擬器,那麼程式運行後中文只會被顯示為一個個的方框□□□□的。(WindowsMobile開發相關資源清單:http://www.cnblogs.com/upto/archive/2007/03/13/mobile-development-tools.html)
在WindowsMobile的SDK安裝完成後,先不要著急開始繼續後面安裝QT庫的步驟,讓我們先建立一個WindowsMobile程式試試:
(點擊看大圖)
直接按F5調試工程,經過短暫的編譯和部署的步驟後,就可以看到一個裝置模擬器的介面,並且會隨機運行我們的測試程式,如:
如果是在一個英文的ROM上運行,則會出現上面右圖的情形,可以參考修改選擇合適的模擬器來進行調試(點擊小圖看大圖):
安裝用於WindowsMobile的QT庫
可以從QT的官方網站查閱具體的安裝步驟,具體可以訪問: http://doc.trolltech.com/4.5/install-wince.html
簡單介紹一下我是如何按照上面的說明一步一步的安裝用於VS2008 + WindowsMobile SDK 6的QT庫吧。
第一步,當然是下載QT啦
當前 Qt for Open Source C++ development on Windows CE 的最新版本是4.5.2,可以從下面的連結下載:
http://get.qtsoftware.com/qt/source/qt-embedded-wince-opensource-src-4.5.2.zip
如果想查看下載最新的版本的話,請訪問這個網址:
http://www.qtsoftware.com/downloads/win-ce-cpp
恩,這個包大小是138M,我用ADSL好一陣等啊。。。。
第二步,安裝配置前的設定
首先是解包,將下載回來的包解壓縮到c:\qt裡,不過這個目錄名稱qt-embedded-wince-opensource-src-4.5.2好長啊,修改成c:\qt\ce452好了。
我們可以注意到,在c:\qt\ce452\bin裡,已經有一個很重要的批處理命令setcepaths.bat。
下一步,從Visual Studio 2008的功能表項目裡,找到Visualt Studio Tools裡的Visual Studio 2008命令提示字元,點擊它可以開啟一個命令提示字元,在這個命令提示字元裡,已經設定好了Visual Studio所需要的各種環境變數。你也可以開啟任意一個命令提示字元,然後運行 C:\Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat ,也是同樣的。
然後,將c:\qt\ce452\bin 增加到PATH環境變數裡。
注意:從這步開始,我們的操作將主要在這個命令提示字元視窗裡輸入命令。
第三步,配置QT庫
從QT官方網站我們可以看到這樣的配置樣本:
configure -platform win32-msvc2005 -xplatform wincewm50pocket-msvc2005
可是我們使用的卻是vs2008,該如何進行配置呢?我們可以開啟(注意,是用文字編輯器開啟而不是運行它)先前提到的 c:\qt\ce452\bin\setcepaths.bat,在最後面看到了適合vs2008的平台名稱:wincewm60professional-msvc2008 (適合PPC類終端,如果是非觸摸的smartphone則選擇wincewm60standard-msvc2008),這兩個名稱也可以在c:\qt\ce452\mkspecs目錄下看到。
於是我們執行下面的命令:
cd /d c:\qt\ce452
configure -platform win32-msvc2008 -xplatform wincewm60professional-msvc2008
於是經曆了漫長的等待後,終於將QT庫進行了正確的配置。
接著是一步很重要的操作,運行:
setcepaths wincewm60professional-msvc2008
這個命令將會為我們設定適合的PATH,INCLUDE,LIB等環境變數,讓我們可以在編譯過程中正確的引用程式碼封裝含檔案和庫檔案等。
然後就是用vs2008提供的命令來進行QT庫的編譯了,簡單的在命令列輸入:
nmake
這一次將經過更長的編譯過程。不過假如沒什麼意外發生的話。你只要去散散步或者喝水杯咖啡小歇一會再回來,QT for Windows Mobile 6 的庫就已經編譯完成,可以使用啦。
移植和運行調試QT開發的應用程式
注意,我們還是在之前的命令提示字元下進行後面的操作。如果你已經關閉了那個提示符視窗,那麼可以新開啟一個提示符視窗,然後將 c:\qt\ce452\bin添加到PATH環境變數的前面,然後運行VisualStudio的vcvarsall.bat,如下所示:
PATH C:\qt\ce452\bin\;%PATH%
"C:\Program Files\Microsoft Visual Studio 9.0\VC\vcvarsall.bat"
setcepaths wincewm60professional-msvc2008
這裡的環境變數設定是非常重要的步驟,只有正確設定了,才可以正確的產生和編譯連結 Windows Mobile的應用程式工程。
首先要根據QT的 *.pro 檔案產生可以在vs2008裡使用的 *.vcproj檔案,如果你是在VS2008+QTIntegration Environment下作的開發,你可以需要先使用qmake –project 命令來產生*.pro檔案,然後我們可以使用下面的命令來產生vcproj檔案:
qmake –tp vc
你也可以指定輸出檔案:
qmake –tp vc –o ***.vcproj
使用過VisualStudio和QT開發過案頭應用的童鞋一定會發現,這個命令其實就是用來將QT Project檔案 ***.pro轉換成Visual Studio的工程檔案的。
註:如果你並未設定環境變數,那麼最好使用絕對路徑運行qmake,比如 c:\qt\ce452\bin\qmake –tp vc –o ***.vcproj
使用VisualStudio2008開啟產生的 vcproj檔案,然後按F5嘗試編譯運行。對於大部分簡單的QT應用程式,到了這步基本上是不會有太多問題了。然而應用於WindowsCE的QT庫與應用於普通Windows平台的QT庫還是有一些差別的。具體的差別,恩,這個,我現在一個初學者還真說不上來什麼。不過在我做一個具體的移植的工作時,至少遇到了QString::toStdString()不能用於WindowsMobile開發的情況,據說是因為在WindowsMobile裡無法支援STL。。。。
恩,總之,經過一番修改後,我們的新工程終於可以成功編譯完成了。然後按F5運行之。
產生….ok
部署.…ok
載入應用程式….YEAH,我們的QT視窗成功的在模擬器系統裡出現啦:
旁邊的對比圖片是在Windows7下的運行效果,是很像吧? 恩,不過還是有點點區別哦,字型和按鈕跟案頭上是不一樣的效果了,最大的區別是,視窗的功能表列,跑到右下角啦。
這個測試程式是一個用來測試動態切換語言的,在案頭環境下,如果點了菜單裡的translate後,就會將視窗上的文字都翻譯成中文或者是另外一個字串,菜單的響應槽代碼如下:
void i18n::on_actionTranslate_triggered()
{
QTranslator trans;
switch(nLang)
{
case 0:
trans.load("i18n_zh");
break;
case 1:
//nothing
break;
}
qApp->installTranslator(&trans);
nLang= (nLang+1)%2;
ui.retranslateUi(this);
}
可是在模擬器上點了菜單後,介面沒有任何響應,查閱上面的代碼,很顯然,trans.load肯定失敗了。。。我們直接偵錯工具的時候,VisualStudio只是簡單的部署了應用程式主輸出檔案(i18n.exe)和相應的qt庫函數和Visual Studio 2008的C運行庫,另外,細心的朋友一定也會注意到,現在啟動的是一個英文版本的模擬器,如果不將其更換為中文的模擬器,即使我們成功的部署了i18n_zh.qm,也是不會顯示出中文的。所以讓我們從VisualStudio2008裡更改一下部署設定吧:
可以再從“項目”菜單裡選擇“項目屬性”來開啟上面的視窗,然後從左側選擇“部署”即可。其中“部署裝置”裡列出的是在你的機器上所有安裝註冊了的模擬器。如果你安裝了WindowsMobile 6.5 的Developer Tool,那麼還可以看到有Windows Mobile 6.5的選項的。而“附加檔案”裡則是一些要隨同目標檔案部署的檔案,qtgui和qtcore庫以及visualstudio2008的執行階段程式庫就是在這裡配置部署到模擬器裡的。讓我們點開它:
部署的附加檔案清單格式是:一行一個檔案,每行格式為 檔案名稱|本地磁碟目錄|目標路徑|註冊表否 ,在裡我已經填寫好了缺失的i18n_zh.qm檔案的部署資訊了。
確定後重新按F5開始運行,這次是中文的模擬器了,並且切換顯示語言後的中文也正確顯示出來了:
利用QT編寫的視窗在WindowsMobile手機裡,同樣的可以在右下角拖拉改變視窗的大小,也可以按住標題列拖動以改變視窗的位置,這些,都與普通Windows視窗完全一致哦,好玩吧!是不是很想立刻就開始自己的WindowsMobile之旅了?別著急,還有最後一步,QT程式在WindowsMobile上的部署!
QT程式在WindowsMobile上的部署
此時,你的程式已經在WindowsMobile模擬器上正常運行了,你一定也跟我一樣,非常迫切的希望可以讓自己的程式在WindowsMobile的手機上運行起來吧!
在Visual Studio 2008的協助下,這一切都是很輕鬆的事情。
首先,我們可以在我們的QT工程所在的解決方案裡添加一個新的安裝部署的項目,如(點擊可看大圖):
這裡有幾個要點:
- 添加到當前解決方案(因為要讓安裝部署的項目依賴我們的主專案)
- 項目名稱,目錄裡最好不要有中文出現,也不要有空格之類的
- 安裝部署項目的屬性裡,關於製造商Manufacture的名字,不能用中文。需要將預設公司名稱修改為英文的。否則最後產生CAB檔案時會失敗。
添加後的Visual Studio介面如所示
安裝項目預設會在“檔案系統”標籤裡顯示“Program Files檔案夾”和“應用程式檔案夾”兩項,可能你會有點迷惑,但是簡單的實驗就能明白各是什麼含義的。簡單做一下說明:
位置 Program Files 對應WindowsMobile上的“程式”,你可以在這裡建立目標檔案的捷徑,這樣你的程式表徵圖就可以顯示在使用者手機裡了。倘若你不在這裡建立捷徑,要運行你的軟體,就只能通過WindowsMobile的檔案管理工具去尋找你的程式才能運行了。這個位置有點點 PC “案頭” 的意思。
除此之外,你還可以添加一個“Start Menu”的系統檔案夾,對應WindowsMobile手機左上方的開始菜單,這個跟案頭Windows版本是一致的。
而位置“應用程式檔案夾”其實相當於案頭Windows裡的C:\Program Files\…. ,所以你添加要部署的檔案的時候,自然是應該添加到“應用程式檔案夾”裡的。下面開始添加需要部署的檔案:
添加後的樣子:
注意,我這裡添加的是Release版本的檔案。如果你想打包Debug版本的程式,要添加的檔案分別應該是QtCored4.dllQtGuid4.dll,msvcr90d.dll。
添加完成後,將項目配置切換為Release,然後在安裝項目上點右鍵,選擇“產生”即可將可以在手機上進行安裝的CAB包給製作出來了。
到此為之。大功告成了!我們終於可以在自己的WindowsMobile手機上運行自己寫的程式了。讓我們看看剛剛製作出來的安裝包:
囧 !!!! ORZ…
一個沒啥功能的軟體,居然有近9M的大小,看來用QT做的程式,這體型都沒辦法走苗條路線啊~~~~~算是一個美中不足的地方了吧。。。。
現在都在傳說Nokia將會在它以後產的手機裡都部署上QT庫,也不知道真假,如果是真的,那我一定會再寫一篇初涉SymbianOS下的QT程式移植的博文,哈哈!