作者:你才小学生
本篇文章介绍兼容Qt4与Qt5版本的Qml简单例程。由于Qt4与Qt5版本的qml文件不能使用宏来区分,所以使用qmake执行脚本来修改qml版本差异代码。(末尾源代码地址)
qml文件转换 下列代码是项目文件代码,会在编译之前执行;
主要作用为识别Qt版本然后替换对应qml文件中的 importQtQuick1.x 或 importQtQuick2.x ;
equals(QT_MAJOR_VERSION,4){
equals(QT_MINOR_VERSION,7): QT_QUICK_VERSION =1.0
equals(QT_MINOR_VERSION,8): QT_QUICK_VERSION =1.1
}
equals(QT_MAJOR_VERSION,5): QT_QUICK_VERSION =2.$${QT_MINOR_VERSION}
macx {
!isEmpty(QT_QUICK_VERSION):
QtQuickVersion.commands +=
"grep -rl 'QtQuick [0-9]\\.[0-9]' $$PWD/ | xargs sed -i '' 's/QtQuick [0-9]\\.[0-9]/QtQuick $${QT_QUICK_VERSION}/g';"
}
unix:!macx {
!isEmpty(QT_QUICK_VERSION):
QtQuickVersion.commands +=
"grep -rl 'QtQuick [0-9]\\.[0-9]' $$PWD/ | xargs sed -i 's/QtQuick [0-9]\\.[0-9]/QtQuick $${QT_QUICK_VERSION}/g';"
}
QtQuickVersion.target = FORCE
PRE_TARGETDEPS += FORCE
QMAKE_EXTRA_TARGETS +=QtQuickVersion
pro文件
QT += core
equals (QT_MAJOR_VERSION,4): QT += declarative
equals (QT_MAJOR_VERSION,5): QT += qml quick quickwidgets
SOURCES += main.cpp
equals(QT_MAJOR_VERSION,4){
equals(QT_MINOR_VERSION,7): QT_QUICK_VERSION =1.0
equals(QT_MINOR_VERSION,8): QT_QUICK_VERSION =1.1
}
equals(QT_MAJOR_VERSION,5): QT_QUICK_VERSION =2.$${QT_MINOR_VERSION}
macx {
!isEmpty(QT_QUICK_VERSION):
QtQuickVersion.commands +=
"grep -rl 'QtQuick [0-9]\\.[0-9]' $$PWD/ | xargs sed -i '' 's/QtQuick [0-9]\\.[0-9]/QtQuick $${QT_QUICK_VERSION}/g';"
}
unix:!macx {
!isEmpty(QT_QUICK_VERSION):
QtQuickVersion.commands +=
"grep -rl 'QtQuick [0-9]\\.[0-9]' $$PWD/ | xargs sed -i 's/QtQuick [0-9]\\.[0-9]/QtQuick $${QT_QUICK_VERSION}/g';"
}
QtQuickVersion.target = FORCE
PRE_TARGETDEPS += FORCE
QMAKE_EXTRA_TARGETS +=QtQuickVersion
main.cpp
#include<QtGlobal>
#if (QT_VERSION < QT_VERSION_CHECK(5, 0, 0))
#include<QApplication>
#include<QDeclarativeView>
int main(int argc,char*argv[])
{
QApplication app(argc, argv);
QDeclarativeView viewer;
viewer.setSource(QUrl::fromLocalFile(QLatin1String("main.qml")));
viewer.show();
return app.exec();
}
#else
#include<QApplication>
#include<QQuickView>
int main(int argc,char*argv[])
{
QApplication app(argc, argv);
QQuickView viewer;
viewer.setSource(QUrl::fromLocalFile(QLatin1String("main.qml")));
viewer.show();
return app.exec();
}
#endif
Qt4版本编译替换后的main.qml
importQtQuick1.1
Rectangle{
width:360
height:360
Text{
text: qsTr("Hello World")
anchors.centerIn: parent
}
MouseArea{
anchors.fill: parent
onClicked:{
Qt.quit();
}
}
}
Qt5版本编译替换后的main.qml
importQtQuick2.7
Rectangle{
width:360
height:360
Text{
text: qsTr("Hello World")
anchors.centerIn: parent
}
MouseArea{
anchors.fill: parent
onClicked:{
Qt.quit();
}
}
}
源码地址
https://github.com/aeagean/QtQuickDemo.git
------------------------------------------------------------------------- 我们尊重原创,也注重分享,如若侵权请联系qter@qter.org。 -------------------------------------------------------------------------
|