美文网首页Qt 编程那些事
QML文件加载的几种方式

QML文件加载的几种方式

作者: devstone | 来源:发表于2019-12-28 22:43 被阅读0次

阅读本文大概需要4分钟

rcc工具

整理下QML过程,看到好多方式加载QML文件,这里参考网上总结整理下.

QQmlApplicationEngine加载QML

查看帮助文档,可以看出QQmlApplicationEngine继承自QQmlEngine->QObject.

这种方式属于QQmlApplicationEngine搭配Window

main.cpp

#include <QGuiApplication>
#include <QQmlApplicationEngine>

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

    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

    return app.exec();
}

对应QML文件内容:
main.qml

import QtQuick 2.7
import QtQuick.Window 2.2

Window {
    visible: true
    width: 460
    height: 320
    title: qsTr("QQmlApplicationEngine方式加载")

    Text {
        text: qsTr("Hello World")
        anchors.centerIn: parent
    }
}

效果

image

以上方式加载以Window为根对象的QML文件,这个时候QML就完全拥有了控制权,可以直接设置窗体的标题、尺寸等信息.

QQuickView加载QML

main.cpp

#include <QGuiApplication>
#include <QQmlApplicationEngine>

#include <QQuickView>

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

    QQuickView view;
    view.setResizeMode (QQuickView::SizeRootObjectToView);
    view.setSource (QUrl("qrc:/main.qml"));
    view.show ();

    return app.exec();
}

这个时候需要修改QML文件中的内容了,如果不修改,直接运行,则会出现2个窗体,并且会输出警告:

error
QQuickView does not support using windows as a root item. 

If you wish to create your root window from QML, consider using QQmlApplicationEngine instead. 

错误很明显,提示不能使用windows作为根.

这里需要将window替换成Rectangle.替换后直接运行,你就会发现提示qrc:/main.qml:8:5: Cannot assign to non-existent property "title".意思很明确了,这里不能通过QML来设置窗口的标题了.

使用这种方式时,对窗口的控制权在C++代码中要实现,QML文件是以Item作为根对象的.

main.qml

import QtQuick 2.7
import QtQuick.Window 2.2

Rectangle {
    visible: true
    width: 460
    height: 320
    //title: qsTr("QQmlApplicationEngine方式加载")

    Text {
        text: qsTr("Hello World")
        anchors.centerIn: parent
    }
}

需要设置标题时可以在C++中来实现,只需要在main.cpp中添加一行:

view.setTitle ("QQuickView方式加载");

QQuickWidget加载QML

官网自带的说明例子.一般用来在QWidget界面上加载QML界面,不过我觉得一般人是不会这么干的,况且这样使用不觉得累么!

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

相关文章

  • QML文件加载的几种方式

    阅读本文大概需要4分钟 整理下QML过程,看到好多方式加载QML文件,这里参考网上总结整理下. QQmlAppli...

  • QML中文件的加载

    在这里小小总结一下QML文件中如何加载QML文件与JavaScript文件。 1、QML文件中加载JavaScri...

  • QmlLoader

    qml中可以使用Loader来加载并显示qml文件 调用 就可以加载对应的qml文件并显示了 需要完整代码请访问Q...

  • Qml调用插件

    创建一个带Qml窗体的动态库, 接口文件如下: 通过调用接口来加载和显示qml文件 调用方加载和调用插件中的接口函...

  • CSS基础与选择器

    > 1、CSS 加载方式有几种? css加载方式主要有一下几种: 1. 在html中通过 引入当前文件夹下的xxx...

  • Flutter常用组件Widget-Image

    显示图片的组件 以下是几种加载图片路径方式: Image.asset 加载asset项目资源中的文件 Image....

  • 二、类的加载、连接、初始化

    可以类的加载可以从通过以下几种方式加载: 1):从本地系统中直接加载 2):通过网络下载class文件 3):从z...

  • QML Loader使用

    能在qml组件需要的时候再创建,即延迟创建QML的时间,类似ios懒加载 main.qml page1.qml p...

  • 热更新实现方式

    SDK 动态加载替换资源和类文件可以有几种实现方式,一种是可以资源文件和代码分开进行加载与替换,例如加载图片资源文...

  • Qt/QML 插件系统

    Qt/QML 插件系统 本文将简要介绍一下 Qt 和 QML 的插件系统,并用几个简单的示例介绍 QML 的几种插...

网友评论

    本文标题:QML文件加载的几种方式

    本文链接:https://www.haomeiwen.com/subject/lfeeoctx.html