QR扫码综合示例教程(十九)Qt5.15.2+Qt6.2.1(qml)拍照捕获视频帧(示例合并)

本文档介绍了如何将Qt5和Qt6的QML工程合并,以适应不同版本的Qt。作者建议避免合并大版本的Qt/qml,但提供了详细步骤:复制C++和QML文件,修改工程配置,根据Qt版本加载不同资源文件,并在main.cpp中处理不同版本的加载。同时,建议使用新版本Qt以利用其新特性。
摘要由CSDN通过智能技术生成

前言:

本次教程是把前两个示例合并在一个工程中,以方便后面的教程

在日常开发过程中,笔者不建议将2个大版本的Qt/qml合并,毕竟二者相关太大,不便维护

笔者使用的是Qtcreator6.0.0

一、新建qml工程

 

 

 

 以上过程仅供参考

Qtcreator6还未正式发布,本身就存在不少问题,建议小伙伴还是继续使用QtCreator5.0.3

 想吐槽一下,Qtcreator6建qml工程,竟没有模块工程了

二、复制原工程文件

1将所有C++文件复制到工程对应目录中

注意,2个Tool类要合并一下

2.将qml文件按照版本号放入不同的目录中

 当然也可以使用pri文件,建2个工程,引入同样的C++类文件

三、修改工程文件

增加新模块,并添加C++、qml文件,关键代码如下

QT += quick qml multimedia quickcontrols2

SOURCES += \
        imageprovider/imageprovider.cpp \
        main.cpp \
        tool/tool.cpp

HEADERS += \
    imageprovider/imageprovider.h \
    tool/tool.h

RESOURCES += \
    qml.qrc

qml.qrc文件中,请小伙伴自己添加qml文件

笔者建议,若真需要同时兼容多个版本的qml文件,请不要放在一个qml.qrc文件中。应该每个版本放置一个,并根据大版本,加载不同的qml.qrc文件,使用方法如下所示

greaterThan(QT_MAJOR_VERSION, 5){
#        message(当前为Qt6及以上版本)
    RESOURCES += qml6.qrc
}
else{
#    message(当前为Qt6以下版本)
    RESOURCES += qml5.qrc
}

四、修改main.cpp文件

int main(int argc, char *argv[])
{
    //自定义style
    QQuickStyle::setStyle("Material");
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
#endif

    QGuiApplication app(argc, argv);

    //注册C++到qml
    qmlRegisterType<Tool>("com.xdqd.classes", 1, 0, "Tool");

    QQmlApplicationEngine engine;
    //添加图像提供者
    engine.addImageProvider(QLatin1String("imageProvider"), new ImageProvider);
    //在不同Qt版本,加载不同的文件
#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
    const QUrl url("qrc:/qml/qt5/main.qml");
#else
    const QUrl url(u"qrc:/qml/qt6/main.qml"_qs);
#endif

    QObject::connect(&engine, &QQmlApplicationEngine::objectCreated,
                     &app, [url](QObject *obj, const QUrl &objUrl) {
        if (!obj && url == objUrl)
            QCoreApplication::exit(-1);
    }, Qt::QueuedConnection);
    engine.load(url);

    return app.exec();
}

完成以上操作后,就可以使用Qt5.15.2或Qt6.2.1编译工程了

本次教程示例源码

后记:

若是条件允许,笔者还是建议多尝试一下高版本的Qt,新版本有了多处更新,如现在qml和js都转化成C++代码,再编译(当前也出现了不少问题)

下篇会再次加入opencv的解码函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

꧁白杨树下꧂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值