1. 程式人生 > >Windows平臺關於Qt+QML應用檔案的釋出

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時,用它就更加方便了。

——————————————————————————–

以上內容都是一些小常識,也許大家早就明瞭了。可惜我這個新手在上面還是吃過大虧,希望對遇到類似問題的朋友有一定的幫助。