QT升級6.0以上版本遇到問題以及解決方法
前言
最近重裝QT的時候發(fā)現(xiàn)QT已經(jīng)升級到了6.0以上的新版本。既然是重裝,那就跟進新的更新。更新新的QT后以前的舊版本建立的工程,自然會出現(xiàn)兼容性的問題,本文就把在后續(xù)各個QT工程在QT6.0版本下遇到的問題已經(jīng)解決辦法記錄下來,以便在其他工程遇到同樣的問題可以查詢快速解決問題。
QRegExp類的使用沒有申明
QT6工程編譯使用到QRegExp類時會出現(xiàn)報錯
error: 'QRegExp' was not declared in this scope
出現(xiàn)以上問題主要是QT6.0以上的程序把 QRegExp類移動到了core5compat中了,解決方法便是在pro文件中添加QT += core5compat,并且在使用到QRegExp類的文件中添加包含的頭文件#include <QtCore5Compat>,由于工程的文件較多,逐個添加包含文件也是一個較大的工程,不知道是否有更好與更快的方法。
另外一種解決方法是使用QRegularExpression替代QRegExp。在使用到的QRegularExpression的文件中添加頭文件,#include <QRegularExpression>。同時QRegExpValidator使用QRegularExpressionValidator替代。
根據(jù)QT官方介紹QRegularExpression在功能和性能方面是對QRegExp的重大改進,應在所有新代碼中使用。因此這里使用的第二種方法進行修復以上問題。
QString類沒有sprintf成員
QT6工程編譯使用到QString類時會出現(xiàn)報錯
error: 'class QString' has no member named 'sprintf'; did you mean 'asprintf'?
這個問題比較簡單,QT Creater已經(jīng)給了提示,詢問是否使用asprintf替代,查看了幫助手冊說明This function (asprintf) was introduced in Qt 5.5.根據(jù)建議替代就好了。
qrand類沒有定義
QT6工程編譯使用到qrand類時會出現(xiàn)報錯
error: 'qrand' was not declared in this scope; did you mean 'srand'?
這個問題比較看似簡單,QT Creater已經(jīng)給了提示,詢問是否使用srand替代,結(jié)果使用srand替代后又提示
error: No matching function for call to 'srand'
查詢官網(wǎng)發(fā)得到的結(jié)果是qrand與srand均在QT5.15版本之后被拋棄了,在QT6版本中使用QRandomGenerator替代了。
QDateTime類沒有toTime_t成員
QT6工程編譯使用到QDateTime類時會出現(xiàn)報錯
error: 'class QDateTime' has no member named 'toTime_t'
QDateTime類中的toTime_t成員本來實現(xiàn)的功能是將當前時間轉(zhuǎn)化為時間戳。查看QT6的QDateTime類的幫助文件,應該是使用toMSecsSinceEpoch成員替代了。
到此這篇關于QT升級6.0以上版本遇到問題以及解決方法的文章就介紹到這了,更多相關QT升級6.0以上版本內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
詳解C++中賦值,關系,函數(shù)調(diào)用運算符重載的實現(xiàn)
本文主要為大家講解一下三個C++中的運算符重載,分別是賦值運算符重載、關系運算符重載和函數(shù)調(diào)用運算符重載,感興趣的小伙伴可以跟隨小編一起學習一下2022-06-06
kernel劫持modprobe?path內(nèi)容詳解
C++?JSON庫?nlohmann::basic_json::accept的用法解析

