Qt5升級(jí)到Qt6分步遷移教程小結(jié)
Qt框架的一個(gè)新的長(zhǎng)期支持版本6.5最近發(fā)布。它為以前的版本引入了許多修復(fù)、改進(jìn)和新功能。有些可能對(duì)您的應(yīng)用程序有用(如果不是現(xiàn)在,可能會(huì)在將來),因此最好將應(yīng)用程序遷移到最新版本的框架。
仍然有許多應(yīng)用程序仍在使用Qt 5,因此直接遷移到最新版本的框架并不容易。在本文中主要指出從Qt 5順利遷移到Qt 6的最關(guān)鍵步驟。
那么,為什么是Qt 6呢?
- 改進(jìn)了性能。Qt 6引入了一個(gè)新的渲染管線,可以提高性能并減少內(nèi)存使用量,從而產(chǎn)生更快、響應(yīng)更快的應(yīng)用程序。
- 改進(jìn)的 QML。QML 已得到增強(qiáng),性能更好,改進(jìn)了對(duì)將C++類導(dǎo)出到 QML 的支持,以及用于調(diào)試 QML 代碼的更強(qiáng)大的工具。新的Qt快速編譯器允許您預(yù)編譯QML文件,以加快啟動(dòng)時(shí)間。
- 改進(jìn)的模塊。一些模塊已被重寫和改進(jìn),例如Qt Quick 3D,Qt Multimedia和Qt WebEngine。使用這些模塊的最新版本將確保您的應(yīng)用程序符合當(dāng)前標(biāo)準(zhǔn)。
- 附加模塊。許多模塊將作為附加組件提供。它將使Qt二進(jìn)制文件更小,并允許您僅在項(xiàng)目中需要時(shí)才下載模塊。
- 統(tǒng)一后端。Qt 6提供了一個(gè)API來訪問多個(gè)環(huán)境中特定于平臺(tái)的功能。這包括圖形、多媒體、輸入和窗口系統(tǒng)。
- 長(zhǎng)期支持。Qt 5已經(jīng)到了它的生命周期,雖然某些舊版本仍然有安全和錯(cuò)誤修復(fù),但任何新的特性或功能都只能在Qt 6中使用。如果您不希望您的應(yīng)用程序過時(shí)得太快,您應(yīng)該進(jìn)行遷移。
這些是確保使用最新版本的Qt 6使您的應(yīng)用程序與最新功能保持同步的主要內(nèi)容。應(yīng)用程序的性能將比以前更好,并且將來維護(hù)應(yīng)用程序?qū)⒏菀住?/p>
遷移到Qt 6的路徑
第 1 步、QT 移植到 QT 5.15
將應(yīng)用程序移植到Qt 5的最新版本,然后切換到Qt 6要容易得多。這是因?yàn)镼t在6.5版本中只發(fā)布了簡(jiǎn)化遷移到Qt 5.15的機(jī)制。從Qt 5的先前版本遷移到最新版本的Qt 5應(yīng)該很簡(jiǎn)單。
第 2 步、檢查模塊更改
在Qt 6中,Qt 5中提供的某些模塊不再可用。這些模塊將被刪除、重命名或合并到不同的模塊中。在最新版本中,幾個(gè)已刪除的模塊已經(jīng)刷新并添加到框架中。
通過檢查模塊更改,可以確保應(yīng)用程序在遷移后按預(yù)期工作。當(dāng)模塊不再存在時(shí),關(guān)于如何表現(xiàn)的可能解決方案可能會(huì)有所不同。下面是幾個(gè)已棄用模塊的示例,以及如何更新使用它們的代碼。
- Qt 快速控制 1 → 使用新的 Qt 快速控制 2
- Qt Multimedia Widgets → 使用 Qt Multimedia 的 QML API
- Qt 圖形效果 → 使用 Qt5Compat 模塊(Qt Quick MultiEffect 從 Qt 6.5 開始)
因此,取決于需要替換的模塊。刪除模塊和其他更改的完整列表可以在Qt文檔中找到。
“是否需要檢查文檔中每個(gè)模塊的更改?”
沒必要。它可以幫助您找到已棄用API的正確替代品,但Qt creator工具可以提示不再受支持的代碼的所有部分。請(qǐng)看步驟4.
第 3 步、QT移植:檢查您的環(huán)境
Qt 6需要C++17或更高版本的編譯器(例如,對(duì)于Windows – MinGW 8.1.0或msvc 2019),因此如果您使用的是舊版本,則是時(shí)候升級(jí)了。Qt公司開發(fā)的工具也支持Qt 6,因?yàn)樘囟ò姹?。?duì)于Qt Creator,它是4.14,對(duì)于Qt Design Studio,它是2.0。
如果安裝了正確的編譯器和工具,則為 Qt 6 準(zhǔn)備的應(yīng)用程序應(yīng)在移植后正確構(gòu)建和運(yùn)行。
第 4 步、執(zhí)行移植到 QT 6
擺脫已棄用的功能。
在Qt 5.15中,Qt 6中不包含的所有內(nèi)容都被標(biāo)記為已棄用。默認(rèn)情況下,此代碼的使用將作為編譯器警告彈出。但是也可以選擇將其視為錯(cuò)誤。
要確保這一點(diǎn),需要定義它應(yīng)設(shè)置為指定宏時(shí),已棄用的功能(在給定版本的Qt或任何更早版本中)將被禁用。
QT_DISABLE_DEPRECATED_BEFORE
0x050F00
如果在生成過程中看到任何錯(cuò)誤,則應(yīng)重構(gòu)該部分。
不帶宏的輸出。應(yīng)用已正確構(gòu)建。
使用宏輸出。無法構(gòu)建應(yīng)用。
運(yùn)行沖突并擺脫這些警告。
Clazy 是一個(gè)靜態(tài)分析工具,可作為 QtCreator 中的插件使用。Clazy 可以分析代碼并向您展示需要改進(jìn)的地方??梢悦鞔_地告訴 Clazy 在執(zhí)行過程中要檢查什么。需要檢查一些特殊選項(xiàng),這些選項(xiàng)可以指向Qt 6中不支持的代碼部分。Clazy 也能夠自動(dòng)修復(fù)這些警告。
在移植過程中有用的選項(xiàng):
- qt6-deprecated-api-fixes
- qt6-header-fixes
- qt6-qhash-signature
- qt6-fwd-fixes
- missing-qobject-macro
可以在首選項(xiàng)→分析器→Clang工具→診斷配置中更改延遲配置。
在移植過程中有用的選項(xiàng):
輸出示例。
必要時(shí)使用 Qt5Compat 模塊。
在第2步中,提到了一個(gè)名為Qt5Compat模塊?
引入該模塊是為了更好的進(jìn)行遷移和過渡。它提供了Qt 6中消失的一些類,例如QRegExp和QStringRef,但由于這一點(diǎn),它仍然可以在Qt 6應(yīng)用程序中使用。比如某些模塊在Qt 6中消失了,但將在下一個(gè)版本中作為MultiEffect重新引入。因此,在此期間,可以暫時(shí)使用Qt5Compat模塊來確保兼容性。但是當(dāng)MultiEffect模塊可用時(shí),應(yīng)該重寫代碼以切斷過時(shí)的API。
如何將模塊導(dǎo)入到項(xiàng)目中:
頭文件包含也需要更改:
最后,請(qǐng)做好相關(guān)測(cè)試。
到此這篇關(guān)于Qt5升級(jí)到Qt6分步遷移教程小結(jié)的文章就介紹到這了,更多相關(guān)Qt5升級(jí)到Qt6內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++的靜態(tài)成員變量和靜態(tài)成員函數(shù)你了解多少
這篇文章主要為大家詳細(xì)介紹了C++的靜態(tài)成員變量和靜態(tài)成員函數(shù),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02C++ 數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列
這篇文章主要介紹了詳解C++ 數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)兩個(gè)棧實(shí)現(xiàn)一個(gè)隊(duì)列的相關(guān)資料,需要的朋友可以參考下2017-03-03Qt將數(shù)據(jù)庫(kù)中的數(shù)據(jù)導(dǎo)出為html
這篇文章主要為大家詳細(xì)介紹了Qt如何實(shí)現(xiàn)將數(shù)據(jù)庫(kù)中的數(shù)據(jù)導(dǎo)出為html,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-12-12C和MFC巧妙獲取外網(wǎng)IP的兩種實(shí)現(xiàn)方法
這篇文章主要介紹了C和MFC巧妙獲取外網(wǎng)IP的兩種實(shí)現(xiàn)方法,功能非常的實(shí)用,需要的朋友可以參考下2014-07-07Qt6.3 + Clion +MSVC2019環(huán)境配置詳解
本文主要介紹了Qt6.3 + Clion +MSVC2019環(huán)境配置詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-01-01