qml 定义函数_Qt 学习之路 2(93):使用 C++ 扩展 QML

本文介绍了如何使用C++扩展QML,以解决QML语言的限制。QML运行在自己的运行时环境,可以通过C++编写功能并封装到QML中。文章详细阐述了QML的运行机制,以及通过上下文属性、向引擎注册类型和QML扩展插件三种方式来扩展QML,并以读写文件的QML插件为例展示了具体实现过程。
摘要由CSDN通过智能技术生成

QML 只能运行在一个受限环境中,这是由于 QML 语言本身有一些限制。为了解决这一问题,我们可以使用 C++ 编写一些功能,供 QML 运行时调用。

为了能够利用 C++ 扩展 QML,首先我们需要理解 QML 的运行机制。

与 C++ 不同,QML 运行在自己的运行时环境中。这个运行时在 QtQml 模块,由 C++ 实现,包含一个负责执行 QML 的引擎,为每个组件保存可访问属性的上下文,以及实例化的 QML 元素组件。

在 Qt Creator 中,我们创建 Qt Quick Application 项目,打开 Qt Creator 自动帮我们生成的 main.cpp,可以看到类似下面的代码(由于版本问题,这段代码可能会有所不同):

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

在这段代码中,QGuiApplication封装了有关应用程序实例的相关信息(比如程序名字、命令行参数等)。QQmlApplicationEngine管理带有层次结构的上下文和组件。QQmlApplicationEngine需要一个 QML 文件,将其加载作为应用程序的入口点。在这个例子中,这个文件就是 main.qml。Qt Creator 帮我们生成的 QML 文件被作为资源文件,因此需要使用“qrc”前缀访问到。这个 QML 文件内容如下:

import QtQuick 2.3import QtQuick.Window 2.2Window {
        visible: true    MouseArea {
            anchors.fill: parent        onClicked: {
                Qt.quit();        }    }    Text {
            text: qsTr("Hello World")        anchors.centerIn: parent    }}

这个 QML 文件根元素是Window项目,包含了一个MouseAreaText。对于根元素是Item的 QML 文件,使用QmlApplicationEngine加载并不会显示任何内容,甚至连窗口都不会显示。这是由于,单独一个Item不能作为独立的窗口,因而没有渲染的容器。QmlApplicationEngine可以

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值