qml加载方式以及区别

qml加载方式包含三种,下面详细介绍每种方式以及区别:

  • QQuickWidget
    继承于QWidget,可以直接添加到Qt的布局当中,因涉及渲染到render到OpenGL帧缓冲区对象,会带来性能损失,性能稍低;禁用所有平台上的线程render loop,例如Animator类和vsync驱动的动画不能使用;避免在QQuickWidget上调用winId(),这个函数会触发本机窗口的创建,导致性能降低,并可能出现渲染问题
  • QQuickView
    继承自QQuickWindow(继承自QWindow),通过转换才能添加到Qt布局中
  • QQmlApplicationEngine
    只能用于qml相关的应用,本身不会创建任何可视化元素,需要手动往qml文件添加。如果你使用Qt Quick里面的元素item,你需要把qml里面加一个Window,然后加载进去。

示例:

int main(int argc, char *argv[])
{
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
    QApplication app(argc, argv);

    QWidget *mainWgt = new QWidget();
    QHBoxLayout *mainLyt = new QHBoxLayout();
    mainLyt->setSpacing(0);
    mainLyt->setAlignment(Qt::AlignCenter);
    mainLyt->setMargin(0);
    mainWgt->setLayout(mainLyt);
    //加载方式1--qml顶层不可为Window
    QQuickWidget *pWgt = new QQuickWidget();
    pWgt->setSource(QStringLiteral("qrc:/quickWidget.qml"));
    mainLyt->addWidget(pWgt);

    //加载方式2--qml顶层不可为Window
    QQuickView *pView = new QQuickView();
    pView->setSource(QStringLiteral("qrc:/quickView.qml"));
    QWidget *wgt = QWidget::createWindowContainer(pView, nullptr);
    wgt->setFixedSize(pView->size());
    mainLyt->addWidget(wgt);

    //加载方式3--qml顶层为Window
    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/qmlApplicationEngine.qml")));
    if (engine.rootObjects().isEmpty())
        return -1;

    mainWgt->show();
    return app.exec();
}

运行效果:
在这里插入图片描述
代码链接:https://download.csdn.net/download/qqzhaojianbiao/19668474?spm=1001.2014.3001.5501

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值