Qt是一款優秀的跨平台開發框架,它可以在桌面、移動平台以及嵌入式平台上運行。目前Qt 5介紹程序發布的文章帖子比較少。大家又非常想要知道如何發布Qt應用程序,於是我花了一點兒時間介紹一下如何發布Qt桌面應用程序。
上海萌夢信息科技有限公司(微博:http://weibo.com/qtdream)原創文章,首發地址:http://qtdream.com/topic/114。歡迎同行前來探討。
上篇文章介紹了如何簡單快速地發布Qt Widgets應用。目前Qt Widgets是Qt 4的技術,那麼到了Qt 5了,官方當然是大力推廣Qt Quick了,因此我們發現有不少人想要了解Qt Quick是如何發布應用程序的,而發布Qt Quick程序,仍然有很多值得注意的地方,否則大家很容易陷進坑裡,所以這篇文章的目的就是幫助大家解決發布Qt Quick應用遇到的問題。
1、創建一個Qt Quick項目,這裡我們將項目的名稱命名為TestQtQuickApp:
2、其它的就沒有設置了,大體相同。最後呢,這個程序在Qt Creator上順利地運行了,運行結果如下:
3、好了,如果我要發布Hello World這個程序,那麼有沒有什麼好的辦法呢?有。和Widgets程序一樣,我們只需要在Qt Creator中設置一下參數就好了:
點擊右下角的小三角,這樣在部署的過程中,就順利地將Qt以及QML的依賴項復制過來了。這回我們在Windows XP上嘗試一下,結果出人意料,出現了這樣的對話框:
這個對話框出現的原因可能是msvcrt.dll在XP這個版本沒有vsprintf_s這樣的動態庫。目前還暫時沒有找到好的解決思路,稍後我再單獨研究一下,看這個事情該如何解決。
不過即使出現了這樣的對話框,也不礙事。我們的hello world程序依然能夠打得開:
這裡要特別注意的是,即使按照windeployqt這樣的方法添加Qt Quick程序的依賴項,我們發現,在目標系統上,雙擊依然無法顯示界面。這是什麼原因呢?原來,windeployqt做的僅僅是“表面”工夫,由於Qt各個模塊依賴的復雜性,windeployqt並沒有包含進來。比如說你的Qt Quick程序原來的是Local Storage模塊,它可能只將Local Storage的依賴復制過來了,其實,Local Storage依賴的是Qt5Sql.dll,這個卻沒有引入。所以才會導致一些模塊無法運行,這也是為什麼很多人按照上述方法部署程序卻依然無法順利運行程序的原因。一個比較好的解決辦法就是,哪怕你的程序大部分都是用QML語言編寫的,在main.cpp中,添加類似#include
下面就是我將Qt 5.5最有名的一個例子程序planets部署到客戶2006年購置的Windows XP機器上。看看效果吧。
圖一:Windows 10效果
圖二:客戶Windows XP上效果