從Qt 5移植到Qt 6的過程一直很容易。在Qt 6的整個開發過程中,一直有意識地努力保持與Qt 5的盡可能多的源兼容性。盡管如此,移植仍需要一些努力。這篇簡短的文章總結了移植到Qt 6時所需的一些步驟。
在Qt 5中,有些類別已經有現有的替代品,並且某些類別在Qt 6開發階段得到了繼任者。因此,能夠同時使用舊的和新的Qt版本編譯代碼可能很有意義。這樣可以確保將不使用任何版本的代碼進行編譯的工作量減至最少,從而使您的應用程序或庫可以繼續與Qt 5和Qt 6一起工作。另一個優點是,現有的單元測試對於大多數版本都可以繼續工作。移植的持續時間以及移植代碼所導致的回歸與Qt 6中引入的錯誤很容易區分開。
種類
下表列出了在Qt 6中已刪除但為了便於移植而保留在Qt5Compat中的類。它還包含將在Qt6中的新代碼中使用的類。
Qt 5類 | Qt 6更換 |
QLinkedList | 清單 |
QRegExp | QRegularExpression |
QStringRef | QStringView |
QXmlSimpleReader | QXmlStreamReader |
QTextCodec | QStringConverter |
QTextEncoder | QStringEncoder |
QTextDecoder | QStringEncoder |
調整構建系統
如果要繼續使用上述Qt 5類,則首先需要調整構建系統以鏈接到新的Qt5Compat模塊。對於qmake
構建系統,將以下行添加到.pro
文件中:
QT += core5compat
如果您已經將應用程序或庫移植到了cmake
構建系統,請將以下內容添加到您的 CMakeList.txt
:
PUBLIC_LIBRARIES
Qt::Core5Compat
修復包括
除了顯然需要進行的構建系統更改外,您可能還需要修復前面提到的類的包含。您的實際代碼可能如下所示:
#include <QtCore / QRegExp>
需要針對新的Qt5Compat模塊進行更新:
#include <QtCore5Compat / QRegExp>
或使用更加簡單和可移植的版本:
#include <QRegExp>
期待
隨着Qt 6的出現,您可能已經考慮測試新的Qt 6 beta版本。如果您的代碼受上述一些Qt Core類更改的影響,這也將允許進行早期測試。對於您可能發現的任何問題,請向bugreports.qt.io提交詳細的錯誤報告。提交錯誤報告時,請記住提及發現問題的Qt版本,並檢查是否存在重復項和已知問題。也歡迎您加入Qt Project郵件列表和開發人員論壇中的討論。
https://www.qt.io/blog/porting-from-qt-5-to-qt-6-using-qt5compat-library