Windows平臺關於Qt+QML應用檔案的釋出
釋出前準備工作:
在通常情況下發布Qt應用,建議將Qt應用程式編譯為release版本,因為release版本exe很小。然後準備編譯好的exe, 通常情況下,使用Qt開發應用都是採用動態編譯的方式來進行釋出,釋出應用的時候就需要將相應的動態連結庫檔案一起釋出了。應用依賴於哪些dll檔案呢?一般來講,有QtCore4.dll、QtGUI4.dll之類的了。但是,由於應用可能涉及到其它的模組,如網路模組等。可以檢視一個.pro檔案瞭解應用具體涉及到哪些模組。還有一個辦法是,如果安裝了VC6,則可以使用depends命令開啟一個依賴檢視工具,直接開啟你的exe檔案便可看到它所依賴的dll檔案。複製出來即可,放在exe檔案所在的目錄即可。
另外還有一部分,是外掛,這些外掛是depends工具顯示不出來的依賴關係,因為只有在應用執行的時候才會動態地去載入。這也是為什麼很多跟我一樣的新手會遇到“找不到資料庫驅動”,“亂碼”等問題的原因。
在Qt的安裝目錄中有一個plugins的目錄,這個目錄放著一些常用的外掛,有資料庫驅動、文字編碼外掛、影象解析等方面的,也基本上一個完整應用所必需的——因為你總會在應用中使用資料庫,中文,使用圖片等(儘管不是一定有這些操作)。釋出應用時,你需要把你使用到的外掛帶上,你會把plugins目錄下的一些dll檔案直接複製出來,與exe檔案放在一起,或者在再新建一個plugins目錄用於放置外掛檔案。在應用中使用QApplication::addLibraryPath(“./”)或者QApplication::addLibraryPath(“./plugins”)。但還是解決不了找不到外掛的問題。
根據官方的說明:
假設你的應用app.exe位於appdir目錄,如下:
+appdir
-app.exe
那麼,appdir目錄其實就等同於plugins目錄。也就是說,當你應用執行的時候,它會在appdir目錄下面找qt的外掛。但是,Qt的外掛是按不同的目錄放置的,當你從Qt的安裝檔案目錄下複製外掛時,還需要建立相應的目錄結構。如下,使用資料庫外掛:
+appdir
-app.exe
+sqldrivers
-qsqlite4.dll
現在即便不使用QApplication::addLibraryPath(“./”),也可以找到資料庫驅動了。
或者使用QApplication::addLibraryPath(“./plugins”),將目錄結構建成如下的樣子,也是可以的:
+appdir
-app.exe
+plugins
+sqldrivers
-qsqlite4.dll
這樣也是正常執行的。重要的,其實是隻有一點。使用qt的外掛時,要注意帶上相應的目錄。如果有一點Qt外掛開發的經驗的話,理解起來就比較方便吧。
另外需要注意一點 是如果你的專案使用到了QML檔案,那你必須將一些系統的qml檔案也一起釋出,可以是這樣子:
+appdir
app.exe
+plugins
+com/nokia/xxxx(這個需要將你Qtsdk下的import下面的com檔案拷貝過去,當然有些檔案我們不需要)
+Qt/labs/xxxx
+QtWebKit/xxxx
等檔案就可以執行啦。
還有需要提醒的一點,就是圖片、文字編碼的外掛。使用起來和上面的例子一樣,只是容易被忽略掉。等到釋出應用後,發現亂碼了,或者是按鈕上的圖片顯示不了等問題是,就應該想到這一點。開發的時候一切正常,在沒有Qt環境的機器上測試的時候,怎麼就都不正常了呢?八成就是少了這些外掛。
另外,在Windows環境上開發,可以使用SysinternalsSuite工具來檢視應用在執行時具體依賴了哪些dll檔案。它是微軟提供的一套開發小工具集合。其中的process explorer工具可以檢視系統程序並顯示出這個程序使用到的dll以及dll所在的目錄。當應用載入不了dll,或者載入了錯誤的dll時,用它就更加方便了。
——————————————————————————–
以上內容都是一些小常識,也許大家早就明瞭了。可惜我這個新手在上面還是吃過大虧,希望對遇到類似問題的朋友有一定的幫助。