一、前言
所有的QML对象类型都是源自QObject类型,因此,QML引擎可以使用Qt元对象系统动态的实例化QML对象,并获取所创建对象的属性与方法。也就是说一旦创建了QML对象,就可以使用C++获取它的属性、函数与信号处理。
主要从以下几个方面介绍:
1、从C++加载QML对象,并读写属性
2、调用QML的函数
3、接收QML发出的信号
二、详细说明
1、QML属性读写
假设存在一个名为MyItem.qml的文件,内容如下:
import QtQuick 2.0
Item {
width: 100; height: 100
}
在C++中,QML文档可以使用 QQmlComponent
或 QQuickView
来加载。加载方法如下:
// Using QQmlComponent
QQmlEngine engine;
QQmlComponent component(&engine,
QUrl::fromLocalFile("MyItem.qml"));
QObject *object = component.create();
...
delete object;
使用QQmlComponent
需要调用QQmlComponent::create()
创建一个QObject 实例。
// Using QQuickView
QQuickView view;
view.setSource(QUrl::fromLocalFile("MyItem.qml"));
view.show();
QObject *object = view.rootObject();
QQuickView
会自动的创建一个QObject 实例,可以通过view.rootObject()
来获取。
获取QObject 对象之后可以通过以下两种方法来设置属性:
object->setProperty("width", 500);//法1
QQmlProperty(object, "width").write(500);//法2
法2相对于法1,会移除上例中的width