找回密码
 立即注册
Qt开源社区 门户 查看内容

兼容Qt4/Qt5版本的QML例程

2019-2-18 19:31| 发布者: admin| 查看: 701| 评论: 0

摘要: 作者:你才小学生 本篇文章介绍兼容Qt4与Qt5版本的Qml简单例程。由于Qt4与Qt5版本的qml文件不能使 ...
作者:你才小学生


本篇文章介绍兼容Qt4与Qt5版本的Qml简单例程。由于Qt4与Qt5版本的qml文件不能使用宏来区分,所以使用qmake执行脚本来修改qml版本差异代码。(末尾源代码地址)

qml文件转换


  • 下列代码是项目文件代码,会在编译之前执行;

  • 主要作用为识别Qt版本然后替换对应qml文件中的 importQtQuick1.x或 importQtQuick2.x;

  1. equals(QT_MAJOR_VERSION,4){

  2.    equals(QT_MINOR_VERSION,7): QT_QUICK_VERSION =1.0

  3.    equals(QT_MINOR_VERSION,8): QT_QUICK_VERSION =1.1

  4. }


  5. equals(QT_MAJOR_VERSION,5): QT_QUICK_VERSION =2.$${QT_MINOR_VERSION}


  6. macx {

  7.    !isEmpty(QT_QUICK_VERSION):

  8.    QtQuickVersion.commands +=

  9.    "grep -rl 'QtQuick [0-9]\\.[0-9]' $$PWD/ | xargs sed -i '' 's/QtQuick [0-9]\\.[0-9]/QtQuick $${QT_QUICK_VERSION}/g';"

  10. }


  11. unix:!macx {

  12.    !isEmpty(QT_QUICK_VERSION):

  13.    QtQuickVersion.commands +=

  14.    "grep -rl 'QtQuick [0-9]\\.[0-9]' $$PWD/ | xargs sed -i 's/QtQuick [0-9]\\.[0-9]/QtQuick $${QT_QUICK_VERSION}/g';"

  15. }


  16. QtQuickVersion.target = FORCE


  17. PRE_TARGETDEPS += FORCE

  18. QMAKE_EXTRA_TARGETS +=QtQuickVersion

pro文件


  1. QT += core


  2. equals (QT_MAJOR_VERSION,4): QT += declarative


  3. equals (QT_MAJOR_VERSION,5): QT += qml quick quickwidgets


  4. SOURCES += main.cpp


  5. equals(QT_MAJOR_VERSION,4){

  6.    equals(QT_MINOR_VERSION,7): QT_QUICK_VERSION =1.0

  7.    equals(QT_MINOR_VERSION,8): QT_QUICK_VERSION =1.1

  8. }


  9. equals(QT_MAJOR_VERSION,5): QT_QUICK_VERSION =2.$${QT_MINOR_VERSION}


  10. macx {

  11.    !isEmpty(QT_QUICK_VERSION):

  12.    QtQuickVersion.commands +=

  13.    "grep -rl 'QtQuick [0-9]\\.[0-9]' $$PWD/ | xargs sed -i '' 's/QtQuick [0-9]\\.[0-9]/QtQuick $${QT_QUICK_VERSION}/g';"

  14. }


  15. unix:!macx {

  16.    !isEmpty(QT_QUICK_VERSION):

  17.    QtQuickVersion.commands +=

  18.    "grep -rl 'QtQuick [0-9]\\.[0-9]' $$PWD/ | xargs sed -i 's/QtQuick [0-9]\\.[0-9]/QtQuick $${QT_QUICK_VERSION}/g';"

  19. }


  20. QtQuickVersion.target = FORCE


  21. PRE_TARGETDEPS += FORCE

  22. QMAKE_EXTRA_TARGETS +=QtQuickVersion

main.cpp


  1. #include<QtGlobal>

  2. #if (QT_VERSION < QT_VERSION_CHECK(5, 0, 0))


  3. #include<QApplication>

  4. #include<QDeclarativeView>


  5. int main(int argc,char*argv[])

  6. {

  7.    QApplication app(argc, argv);


  8.    QDeclarativeView viewer;

  9.    viewer.setSource(QUrl::fromLocalFile(QLatin1String("main.qml")));

  10.    viewer.show();

  11.    return app.exec();

  12. }


  13. #else


  14. #include<QApplication>

  15. #include<QQuickView>


  16. int main(int argc,char*argv[])

  17. {

  18.    QApplication app(argc, argv);


  19.    QQuickView viewer;

  20.    viewer.setSource(QUrl::fromLocalFile(QLatin1String("main.qml")));

  21.    viewer.show();

  22.    return app.exec();

  23. }


  24. #endif

Qt4版本编译替换后的main.qml


  1. importQtQuick1.1


  2. Rectangle{

  3.    width:360

  4.    height:360

  5.    Text{

  6.        text: qsTr("Hello World")

  7.        anchors.centerIn: parent

  8.    }

  9.    MouseArea{

  10.        anchors.fill: parent

  11.        onClicked:{

  12.            Qt.quit();

  13.        }

  14.    }

  15. }

Qt5版本编译替换后的main.qml


  1. importQtQuick2.7


  2. Rectangle{

  3.    width:360

  4.    height:360

  5.    Text{

  6.        text: qsTr("Hello World")

  7.        anchors.centerIn: parent

  8.    }

  9.    MouseArea{

  10.        anchors.fill: parent

  11.        onClicked:{

  12.            Qt.quit();

  13.        }

  14.    }

  15. }

源码地址


  1. https://github.com/aeagean/QtQuickDemo.git


-------------------------------------------------------------------------
我们尊重原创,也注重分享,如若侵权请联系qter@qter.org。
-------------------------------------------------------------------------

鲜花

握手

雷人

路过

鸡蛋

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了