Qt4 to Qt5(持續更新)

新的一年開始了,我也決定將工作環境從Qt4遷移到Qt5,據說Qt4到Qt5是比Qt3到Qt4 easy不少,最大的變動是QWidget。

1,修改路徑系統。Qt4 的 QtGUI下很多類被獨立到widgets模塊裏了,爲了提高兼容性,把這些include 的擡頭全去了,直接是 #include<qapplication> ,這樣,通過 Qt += 模塊名,即可彌合4,5之間的差異。

2,添加一個宏替換,Qt ::WFlag變成 Qt5 的 WindowFlags, 小問題。

3,插件系統的修改。 新的 Q_PLUGIN_METADATA 在插件實現類的首部,代替了以往在 CPP裏Export 的模式,對遷移沒有影響。加入編譯預處理宏,判斷一下標誌,決定採用哪一種方法。

4,字符串處理方式問題。目前,由於項目對中文、英文和國際化的使用較爲規範,沒有遇到亂碼的問題,可以認爲兼容性較好。

5,第三方依賴性

如果引用了 PostgreSQL 或 MySQL的Sql 連接插件,注意把 libpq 和  libmysql相關的庫文件拷貝到可執行文件所在文件夾下,而不是 plugins 所在的文件夾,否則儘管可以枚舉到驅動,但連接可能失敗。如果引用了OCI的插件,注意不要拷貝oci.dll 到發佈文件夾,在某些情形下,會導致連接失敗。而是利用發佈目的機器路徑系統上的Oracle 連接實例來獲取依賴。

6,

toAscii()和fromAscii()已被棄用

替換

  1. fromAscii()
  2. toAscii()

  1. fromLatin1()
  2. toLatin1()
7,

QWorkspace已被棄用

8. 若程序中用到ActiveQt,原來的做法是在.pro中加CONFIG += qaxcontainer,現在需要改成

QT += axcontainer

當然了,原來的CONFIG += qaxcontainer也將去除


9. 在源文件中,凡是涉及到原QtGui中可視部件的,全要修改頭文件引用,或者增加QtWidgets頭文件,比如:

#include <QtGui/QPushButton>  要改成  #include <QPushButton>  或者  #include <QtWidgets/QPushButton>

在以前使用#include <QtGui>的地方,要加上 #include <QtWidgets>


10. 由於Qt5去除了QTextCodec::setCodecForCStrings()函數,所以在涉及到在cpp中直接寫漢字的情況,有如下兩種修改方法:

a)  如果以前的源文件編碼是GBK的,則需要使用QString::fromLocal8Bit()函數將原來的漢字括起來;或者直接將源文件編碼轉換成UTF-8的(缺點是MSVC編譯器不能方便的使用了)。我使用了使用QString::fromLocal8Bit()來調用的方式(當然了,另寫便捷函數或宏來處理)

b) 如果以前的源文件編碼是UTF-8的,則什麼都不用動。


11. 以前使用QDesktopServices::storageLocation(QDesktopServices::xxxx)來獲取一些系統目錄,現在則要改成

QStandardPaths::writableLocation(QStandardPaths::xxxx)


12. 以前調用QFileDialog::getSaveFileName()時,如果在Windows下使用Native Dialog形式指定文件名,則能正常顯示,如今Qt5不能正常顯示文件名。所以將它的後兩個參數加上了,即QFileDialog::getSaveFileName(xxx, xxx, xxx, xxx, 0, QFileDialog::DontUseNativeDialog),這樣就正常了,只是它的對話框不是系統形式的,暫且將就吧。


13. 還有,Qt5解決了ui_qaxselect.h文件的問題。在Qt4時代,使用ActiveQt時,老提示沒有這個文件,需要自己找到源代碼手工uic qaxselect.ui > ui_qaxselect.h來生成一下,Qt5中則解決了該問題。


14.使用到打印相關的類,Qt5單獨放到了QtPrintSupport模塊中,所以得加頭文件#include <QtPrintSupport>,在.pro中要加QT += printsupport


15. 使用到QWebPage等webkit相關可視部件的,Qt5單獨放到了QtWebKitWidgets模塊中,所以得加頭文件#include <QtWebKitWidgets>,在.pro中要加QT += webkitwidgets


16. Qt4中的cleanlooks、plastique、cde、motif等主題樣式沒有,新加了個fusion,好吧,問題是我的一個項目框架使用的是cleanlooks主題樣式然後加自定義樣式表,這下可好,升級Qt5後,樣子有的就與windowsvista或fusion不相符或有缺陷,得調整一下了。所以,對主題樣式依賴比較嚴重的程序,要衡量一下是否要升級到Qt5了。


17. .pro文件中的TARGET在Qt4(qmake v2)中是可以不填寫的,那麼它就從自動採用.pro文件名字,而在Qt5中(qmake v3)這個TARGET不可不寫。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章