栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

QML实战(1),加载QML的两种方式

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

QML实战(1),加载QML的两种方式

简述

  一个QML作为主页面的软件,它的主QML页面加载有两种方式,一种是利用QQuickView作为容器加载,另一种是使用 QQmlApplicationEngine引擎加载。下面就详细看下这两种方式。

方式1,使用qmlengine加载
#include 
#include 

int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);


    QQmlApplicationEngine engine;
    const QUrl url(QStringLiteral("qrc:/main.qml"));
    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();
}

注意此方式加载的QML文件的跟节点一定要是个Window,即窗体,因为QQmlApplicationEngine只是一个加载引擎,不负责窗体的创建和显示。有一种情况不需要根节点是Window,那就是你的程序没有GUI,不依赖QGuiApplication。

方式2,使用QQuickView加载
  const QUrl url(QStringLiteral("qrc:/qml/main.qml"));
  QQuickView *view = new QQuickView;
  view->setSource(url);
  view->show();

此方式加载的QML文件根节点不能是Window,因为QQuickView已经帮你创建了窗口,你的根节点可以是Rectangle或者Item。

个人认为这种方式最为灵活,可以通过m_qmlPlayer = qobject_cast(view->rootObject());获取它的根节点,并通过invoke直接调用qml的方法。;例如:

QmetaObject::invokeMethod(view, "show", Qt::QueuedConnection);

还有一点是在android低性能设备上发现,使用QQuickView的视频渲染效率是好于QQmlApplicationEngine的。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/316825.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号