本篇文章介绍兼容Qt4与Qt5版本的Qml简单例程。由于Qt4与Qt5版本的qml文件不能使用宏来区分,所以使用qmake执行脚本来修改qml版本差异代码。(末尾源代码地址)
qml文件转换
- 下列代码是项目文件代码,会在编译之前执行;
- 主要作用为识别Qt版本然后替换对应qml文件中的
import QtQuick 1.x
或import QtQuick 2.x
;1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23equals(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文件
1 | QT += core |
main.cpp
1 |
|
Qt4版本编译替换后的main.qml
1 | import QtQuick 1.1 |
Qt5版本编译替换后的main.qml
1 | import QtQuick 2.7 |
源码地址
1 | https://github.com/aeagean/QtQuickDemo.git |