將Qt項目升級到Qt6吐血經(jīng)驗總結(jié)_第1頁
將Qt項目升級到Qt6吐血經(jīng)驗總結(jié)_第2頁
將Qt項目升級到Qt6吐血經(jīng)驗總結(jié)_第3頁
將Qt項目升級到Qt6吐血經(jīng)驗總結(jié)_第4頁
將Qt項目升級到Qt6吐血經(jīng)驗總結(jié)_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第將Qt項目升級到Qt6吐血經(jīng)驗總結(jié)greaterThan(QT_MAJOR_VERSION,4):QT+=widgets

greaterThan(QT_MAJOR_VERSION,5):QT+=core5compat

//代碼中引入頭文件

#if(QT_VERSION=QT_VERSION_CHECK(5,0,0))

#includeQtWidgets

#endif

#if(QT_VERSION=QT_VERSION_CHECK(6,0,0))

#includeQtCore5Compat

#endif

3.默認Qt6開啟了高分屏支持,界面會變得很大,甚至字體發(fā)虛,很多人會不習慣,因為這種模式如果程序很多坐標計算沒有采用devicePixelRatio進行運算的話,100%會出現(xiàn)奇奇怪怪的問題,因為坐標不準確了。要取消這種效果可以設(shè)置高分屏縮放因子。

#if(QT_VERSION=QT_VERSION_CHECK(6,0,0))

QGuiApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::Floor);

#endif

4.原有的隨機數(shù)函數(shù)提示用QRandomGenerator替代,為了兼容所有qt版本,改動最小的辦法是直接用c++中的隨機數(shù),比如qsrand函數(shù)換成srand,qrand函數(shù)換成rand,查看過源代碼,其實封裝的就是c++中的隨機數(shù),很多類似的封裝比如qSin封裝的sin。

5.QColor的light改成lighter,dark改成darker,其實lighter、darker這兩個方法以前一直有。

6.QFontMetricsF中的fm.width換成fm.horizontalAdvance,從5.11開始用新函數(shù)。

7.QPalette調(diào)色板枚舉值,F(xiàn)oreground=WindowText,Background=Window,其中Foreground和Background沒有了,要用WindowText和Window替代,以前就有。類似的還有setTextColor改成了setForeground。

8.QWheelEvent的delta()改成angleDelta().y(),pos()改成position()。

9.svg模塊拆分出來了svgwidgets,如果用到了該模塊則需要在pro增加QT+=svgwidgets。

10.qlayout中的margin()函數(shù)換成contentsMargins().left(),查看源碼得知以前的margin()返回的就是contentsMargins().left(),在四個數(shù)值一樣的時候,默認四個數(shù)值就是一樣。類似的還有setMargin移除了,統(tǒng)統(tǒng)用setContentsMargins。

11.之前QCharc=0xf105全部要改成強制轉(zhuǎn)換QCharc=(QChar)0xf105,不再有隱式轉(zhuǎn)換,不然編譯報錯提示error:conversionfrom'int'to'QChar'isambiguous。

12.qSort等一些函數(shù)用回c++的std::sort。

#if(QT_VERSION=QT_VERSION_CHECK(6,0,0))

std::sort(ipv4s.begin(),ipv4s.end());

#else

qSort(ipv4s);

#endif

13.Qt::WA_NoBackground改成Qt::WA_OpaquePaintEvent。

14.QMatrix類廢棄了沒有了,換成QTransform,函數(shù)功能基本一致,QTransform類在Qt4就一直有。

15.QTime計時去掉了,需要改成QElapsedTimer,QElapsedTimer類在Qt4就一直有。

16.QApplication::desktop()廢棄了,換成了QApplication::primaryScreen()。

#if(QT_VERSIONQT_VERSION_CHECK(5,0,0))

#include"qscreen.h"

#definedeskGeometryqApp-primaryScreen()-geometry()

#definedeskGeometry2qApp-primaryScreen()-availableGeometry()

#else

#include"qdesktopwidget.h"

#definedeskGeometryqApp-desktop()-geometry()

#definedeskGeometry2qApp-desktop()-availableGeometry()

#endif

17.獲取當前屏幕索引以及尺寸需要分別處理。

//獲取當前屏幕索引

intQUIHelper::getScreenIndex()

//需要對多個屏幕進行處理

intscreenIndex=0;

#if(QT_VERSION=QT_VERSION_CHECK(5,0,0))

intscreenCount=qApp-screens().count();

#else

intscreenCount=qApp-desktop()-screenCount();

#endif

if(screenCount1){

//找到當前鼠標所在屏幕

QPointpos=QCursor::pos();

for(inti=0;iscreenCount;++i){

#if(QT_VERSION=QT_VERSION_CHECK(5,0,0))

if(qApp-screens().at(i)-geometry().contains(pos)){

#else

if(qApp-desktop()-screenGeometry(i).contains(pos)){

#endif

screenIndex=i;

break;

returnscreenIndex;

//獲取當前屏幕尺寸區(qū)域

QRectQUIHelper::getScreenRect(boolavailable)

QRectrect;

intscreenIndex=QUIHelper::getScreenIndex();

if(available){

#if(QT_VERSION=QT_VERSION_CHECK(5,0,0))

rect=qApp-screens().at(screenIndex)-availableGeometry();

#else

rect=qApp-desktop()-availableGeometry(screenIndex);

#endif

}else{

#if(QT_VERSION=QT_VERSION_CHECK(5,0,0))

rect=qApp-screens().at(screenIndex)-geometry();

#else

rect=qApp-desktop()-screenGeometry(screenIndex);

#endif

returnrect;

}

18.QRegExp類移到了core5compat模塊,需要主動引入頭文件#include。

19.QWheelEvent構(gòu)造參數(shù)和對應(yīng)的計算方位函數(shù)變了。

//模擬鼠標滾輪

#if(QT_VERSIONQT_VERSION_CHECK(6,0,0))

QWheelEventwheelEvent(QPoint(0,0),-scal,Qt::LeftButton,Qt::NoModifier);

#else

QWheelEventwheelEvent(QPointF(0,0),QPointF(0,0),QPoint(0,0),QPoint(0,-scal),Qt::LeftButton,Qt::NoModifier,Qt::ScrollBegin,false);

#endif

QApplication::sendEvent(widget,wheelEvent);

//鼠標滾輪直接修改值

QWheelEvent*whellEvent=(QWheelEvent*)event;

//滾動的角度,*8就是鼠標滾動的距離

#if(QT_VERSIONQT_VERSION_CHECK(6,0,0))

intdegrees=whellEvent-delta()/8;

#else

intdegrees=whellEvent-angleDelta().x()/8;

#endif

//滾動的步數(shù),*15就是鼠標滾動的角度

intsteps=degrees/15;

20.qVariantValue改成qvariant_cast,qVariantSetValue(v,value)改成了v.setValue(val)。相當于退回到最原始的方法,查看qVariantValue源碼封裝的就是qvariant_cast。

21.QStyleOption的init改成了initFrom。

22.QVariant::Type換成了QMetaType::Type,本身以前的QVariant::Type封裝的就是QMetaType::Type。

23.QStyleOptionViewItemV2V3V4之類的全部沒有了,暫時可以用QStyleOptionViewItem替代。

24.QFont的resolve的一個重載函數(shù)換成了resolveMask。

25.QSettings的setIniCodec方法移除了,默認就是utf8,不需要設(shè)置。

26.qcombobox的activated(QString)和currentIndexChanged(QString)信號刪除了,用int索引參數(shù)的那個,然后自己通過索引獲取值。個人覺得這個沒必要刪除。

27.qtscript模塊徹底沒有了,盡管從Qt5時代的后期版本就提示為廢棄模塊,一致堅持到Qt6才正式廢棄,各種json數(shù)據(jù)解析全部換成qjson類解析。

28.QByteArray的appendindexOflastIndexOf等眾多方法的QString參數(shù)重載函數(shù)廢棄了,要直接傳QByteArray,就在原來參數(shù)基礎(chǔ)上加上.toUtf8()。查看源碼也看得到以前的QString參數(shù)也是轉(zhuǎn)成.toUtf8()再去比較。

29.QDateTime的時間轉(zhuǎn)換函數(shù)toTime_t+setTime_t名字改了,對應(yīng)改成了toSecsSinceEpoch+setSecsSinceEpoch,這兩個方法在Qt5.8時候新增加的。

30.QLabel的pixmap函數(shù)之前是指針*pixmap()現(xiàn)在換成了引用pixmap()。

31.QTableWidget的sortByColumn方法移除了默認升序的方法,必須要填入第二個參數(shù)表示升序還是降序。

32.qtnetwork中的錯誤信號error換成了errorOccurred。

33.Xml

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論