06_Qt 加载QML文件

项目描述:

随着对qt的不断了解,使用qml的场景逐渐变多。但是又没有直接过渡到使用qquick开发软件,所以加载qml文件的问题显得很有必要。qml 文件该加载到工程中有以下几种方式:

1. QQmlApplicationEngined搭配 Window

QML 文件以 Window为根对象 ,拥有窗口的完整控制权,可以直接设置标题、窗口尺寸等属性。
示例:

#include <QGuiApplication>
#include <QQmlApplicationEngine>
int main(int argc, char *argv[])
{
    
    
    QGuiApplication app(argc, argv);
    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
    if (engine.rootObjects().isEmpty())
    return -1;
    return app.exec();
}

2. QQuickView 搭配 Item

QML 文件是以 Item (及 以Item为根的组件)作为根对象,对窗口的控制权(标题、窗口尺寸)是在 C++代码中,
示例:

#include <QGuiApplication>
#include <QQuickView>
int main(int argc, char *argv[])
{
    
    
    QGuiApplication app(argc, argv);
    QQuickView *view = new QQuickView;
    view->setResizeMode(QQuickView::SizeRootObjectToView);
    view->setSource(QUrl(QStringLiteral("qrc:/main.qml")));
    view->show();
    return app.exec();
}

3. QQuickWidget(继承于 QWidget) 加载 QML

这种方式主要是用于在 QWidget 界面上加载 QML 界面。
示例:

QQuickWidget *view = new QQuickWidget;
view->setSource(QUrl::fromLocalFile("myqmlfile.qml"));
view->show();

缺点:
QQuickWidget是为了在QWidget和QQuick进行过渡设计的,相对于QQuickView他有以下缺点:

  1. QQuickWidget的灵活,是以牺牲性能为代价的。与QQuickWindow和QQuickView不同,QQuickWidget涉及渲染到render到OOpenGL帧缓冲区对象,这个会带来轻微的性能损失。
  2. QQuickWidget将禁用所有平台上的线程render loop,例如Animator类和vsync驱动的动画不能使用
  3. 避免在QQuickWidget上调用winId()。这个函数会触发本机窗口的创建,导致性能降低,并可能出现渲染问题。

猜你喜欢

转载自blog.csdn.net/weixin_44248637/article/details/129361086