您现在的位置是:首页 >技术教程 >QT4与QT5兼容问题网站首页技术教程

QT4与QT5兼容问题

金色暖阳 2023-05-24 04:00:02
简介QT4与QT5兼容问题

QT4 与QT5 兼容,源码差异部分通过QT_VERSION 宏来区分

常见区别

  1. widgets prinsupport charts 等模块一如方式,Qt5 将QtWidgets QtPrintsupport 模块从QtGui 中分离出来,QT4 中没有qjson4 和 charts 模块,需要特殊处理
    在pro文件中,按需添加如下内容。
QT += core gui

greaterThan(QT_MAJOR_VERSION,4{
#根据需要引入QT5的widgets printsupport charts 模块

QT +=  widgets  widgets  widgets 
QT += uitools
win32: QT += axcontainer
}
else{
#根据需要在QT4引入qjson4 和 charts模块
INCLUDEPATH += $$(SMART_HOME)/dev/include/qjson4/ $$(QTDIR)/include/
$$(QTDIR)/include/QtCharts/
LIBS += -lqjson4 -lQtCharts
CONFIG += uitools
win32: CONFIG += qaxcontainer
}
DEPENDPATH += $$INCLUDEPATH

QT += core widgets 改 QT += core gui
QT += uitools 改为 CONFIG += uitools
QT += axcontainer 改为 CONFIG += qaxcontainer

如果链接时出现一下错误
在这里插入图片描述
在.pro文件中还需添加

win32{
	LIBS += -lFT_ET99_API -lET_OTPVerify -lZAZAPIt
}
else{
	LIBS += -lFT_ET99 -letotpverify -lzazlibPC64
}

在源代码中根据QT_VERSION 宏区分QT版本
#if QT_VERSION > 0x050000 //qt5.0以上的版本
#include
#endif
#include …

插件接口定义区别

class DONUT_CHART_PLUGIN_LIB_EXPORY CDonutChartPlugin : public QObject , public PluginWidgetFactoryInterface
{
	Q_OBJECT
	#if QT_VERSION  > 0x050000
	Q_PLUGIN_METADATA(IID PluginWidgetFactoryInterface_iid)
	Q_INTERFACES(PluginWidgetFactoryInterface)
}

在cpp文件末尾添加如下内容

#if QT_VERSION  《 0x050000
Q_PLUGIN_EXPORT2(donutchartwidget,CDonutChartPlugin)
#endif

其中CDonutChartPlugin为接口实现类的名称,donutchartwidget 与pro文件中的target变量一致,即插件so包的名称

枚举类型常量写法,去掉美剧类型名

Qt::Orientation::Vertical 改为 Qt::Vertical
Qt::Variant::Tpye::Int   改为 Qt::Variant::Int

容器套容器 右边尖括号增加空格

QMap<long,QVecor<double> >  tmp; 

其他问题

QComBox 的currentData()函数,QT4中无此函数
int cur = ui.combox->currentData().toInt();
改为
int cur = ui.combox->itemData( ui.combox->currentIndex().toInt());

没有setCurrentText()函数
改为setCurrentIndex(combx->findText(txt));

QCompleter 没有setFilterMode 函数
改为

#if QT_VERSION  > 0x050000
 pCompleter.setFilterMode();
#endif

QHeader 区别处理
setClickable ⇒ setSectionsClickable(true)

void mouseDoubleClickEvent() Q_DECL_OVERRIDE
去掉Q_DECL_OVERRIDE

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。