-
一般方法
- 安装5.15版本,定位到报错的函数,切换到源码头文件,可以看到对应提示字样 QT_DEPRECATED_X("Use sizeInBytes") 和新函数。按照这个提示类修改就没错,一些函数是从Qt5.7 5.9 5.10等版本新增加的,可能你的项目还用的Qt4的方法,但是Qt6以前都兼容这些旧方法,到了Qt6就彻底需要用新方法了。
-
core核心类变化-
Qt6对core这个核心类进行了拆分,多出来core5compat,因此你需要在pro增加对应的模块已经代码中引入对应的头文件。
greaterThan(QT_MAJOR_VERSION, 5): QT += core5compat
-
-
默认Qt6开启了高分屏支持,界面会变得很大,甚至字体发虚,很多人会不习惯,因为这种模式如果程序很多坐标计算没有采用devicePixelRatio进行运算的话,100%会出现奇奇怪怪的问题,因为坐标不准确了。要取消这种效果可以设置高分屏缩放因子。
#if (QT_VERSION >= QT_VERSION_CHECK(6,0,0)) QGuiApplication::setHighDpiScaleFactorRoundingPolicy(Qt::HighDpiScaleFactorRoundingPolicy::Floor); #endif -
原有的随机数函数提示用
QRandomGenerator替代 -
QColor的light改成lighter,dark改成darker -
QFontMetricsF中的fm.width换成fm.horizontalAdvance,从5.11开始用新函数。 -
QPalette调色板枚举值,Foreground改成WindowText,Background改成Window,类似的还有setTextColor改成了setForeground。 -
QWheelEvent的delta()改成angleDelta().y(),pos()改成position()。 -
svg模块拆分出来了
svgwidgets,如果用到了该模块则需要在pro增加QT += svgwidgets。 -
qlayout中的margin()函数换成contentsMargins().left(),类似的还有setMargin移除了,统统用setContentsMargins`。 -
之前
QChar c = 0xf105全部要改成强制转换QChar c = (QChar)0xf105,不再有隐式转换,不然编译报错提示error: conversion from 'int' to 'QChar' is ambiguous。 -
qSort等一些函数用回c++的std::sort。#if (QT_VERSION >= QT_VERSION_CHECK(6,0,0)) std::sort(ipv4s.begin(), ipv4s.end()); #else qSort(ipv4s); #endif -
Qt::WA_NoBackground改成Qt::WA_OpaquePaintEvent。 -
QMatrix类废弃了没有了,换成QTransform,函数功能基本一致,QTransform类在Qt4就一直有。 -
QTime计时去掉了,需要改成QElapsedTimer,QElapsedTimer类在Qt4就一直有。 -
QApplication::desktop()废弃了, 换成了QApplication::primaryScreen()。#if (QT_VERSION > QT_VERSION_CHECK(5,0,0)) #include "qscreen.h" #define deskGeometry qApp->primaryScreen()->geometry() #define deskGeometry2 qApp->primaryScreen()->availableGeometry() #else #include "qdesktopwidget.h" #define deskGeometry qApp->desktop()->geometry() #define deskGeometry2 qApp->desktop()->availableGeometry() #endif -
获取当前屏幕索引以及尺寸需要分别处理获取当前屏幕索引以及尺寸需要分别处理
//获取当前屏幕索引 int QUIHelper::getScreenIndex() { //需要对多个屏幕进行处理 int screenIndex = 0; #if (QT_VERSION >= QT_VERSION_CHECK(5,0,0)) int screenCount = qApp->screens().count(); #else int screenCount = qApp->desktop()->screenCount(); #endif if (screenCount > 1) { //找到当前鼠标所在屏幕 QPoint pos = QCursor::pos(); for (int i = 0; i < screenCount; ++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; } } } return screenIndex; } -
QRegExp类移到了core5compat模块,需要主动引入头文件#include <QRegExp>。 -
QWheelEvent构造参数和对应的计算方位函数变了。//模拟鼠标滚轮 #if (QT_VERSION < QT_VERSION_CHECK(6,0,0)) QWheelEvent wheelEvent(QPoint(0, 0), -scal, Qt::LeftButton, Qt::NoModifier); #else QWheelEvent wheelEvent(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_VERSION < QT_VERSION_CHECK(6,0,0)) int degrees = whellEvent->delta() / 8; #else int degrees = whellEvent->angleDelta().x() / 8; #endif //滚动的步数,*15就是鼠标滚动的角度 int steps = degrees / 15; -
qVariantValue改成qvariant_cast,qVariantSetValue(v, value)改成了v.setValue(val)。 -
QStyleOption的init改成了initFrom。 -
QVariant::Type换成了QMetaType::Type -
QStyleOptionViewItemV2V3V4之类的全部没有了,暂时可以用QStyleOptionViewItem替代。 -
QFont的resolve的一个重载函数换成了resolveMask。 -
QSettings的setIniCodec方法移除了,默认就是utf8,不需要设置。 -
qcombobox的activated(QString)和currentIndexChanged(QString)信号删除了,用int索引参数的那个,然后自己通过索引获取值。 -
qtscript模块彻底没有了,尽管从Qt5时代的后期版本就提示为废弃模块,一致坚持到Qt6才正式废弃,各种json数据解析全部换成qjson类解析。 -
QByteArray的appendindexOflastIndexOf等众多方法的QString参数重载函数废弃了,要直接传QByteArray,就在原来参数基础上加上.toUtf8()。 -
QDateTime的时间转换函数toTime_t+setTime_t名字改了,对应改成了toSecsSinceEpoch+setSecsSinceEpoch,这两个方法在Qt5.8时候新增加的。 -
QLabel的pixmap函数之前是指针*pixmap()现在换成了引用pixmap()。 -
QTableWidget的sortByColumn方法移除了默认升序的方法,必须要填入第二个参数表示升序还是降序。 -
qtnetwork中的错误信号error换成了errorOccurred。 -
XmlPatterns模块木有了,全部用xml模块重新解析。 -
nativeEvent的参数类型变了。#if (QT_VERSION >= QT_VERSION_CHECK(6,0,0)) bool nativeEvent(const QByteArray &eventType, void *message, qintptr *result); #else bool nativeEvent(const QByteArray &eventType, void *message, long *result); #endif