前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >兼容Qt4/Qt5版本的QML例程

兼容Qt4/Qt5版本的QML例程

作者头像
Qt君
发布2019-07-15 15:42:24
1.4K0
发布2019-07-15 15:42:24
举报
文章被收录于专栏:跟Qt君学编程跟Qt君学编程

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

qml文件转换

  • 下列代码是项目文件代码,会在编译之前执行;
  • 主要作用为识别Qt版本然后替换对应qml文件中的 importQtQuick1.ximportQtQuick2.x;
代码语言:javascript
复制
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文件

代码语言:javascript
复制
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

代码语言:javascript
复制
#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

代码语言:javascript
复制
import QtQuick 1.1

Rectangle {
    width: 360
    height: 360
    Text {
        text: qsTr("Hello World")
        anchors.centerIn: parent
    }
    MouseArea {
        anchors.fill: parent
        onClicked: {
            Qt.quit();
        }
    }
}

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

代码语言:javascript
复制
import QtQuick 2.7

Rectangle {
    width: 360
    height: 360
    Text {
        text: qsTr("Hello World")
        anchors.centerIn: parent
    }
    MouseArea {
        anchors.fill: parent
        onClicked: {
            Qt.quit();
        }
    }
}

源码地址

代码语言:javascript
复制
https://github.com/aeagean/QtQuickDemo.git
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-02-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Qt君 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • qml文件转换
  • pro文件
  • main.cpp
  • Qt4版本编译替换后的main.qml
  • Qt5版本编译替换后的main.qml
  • 源码地址
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档