简介
qmlRegisterSingletonType是一个带回调的注册函数,作用是将C++类注册到QML系统中并带一个回调函数。
该回调函数在每次调用doSomething时候调用,然后在回调函数里产生新的C++ Class提供给QML调用,此方法可以实现C++ Class 的动态加载和动态切换。
范例
注:该范例摘选自官方说明手册,本人尚未实验过在此仅作说明参考,介绍是依据代码自己理解的,若有误欢迎大神指出。
// 首先定义一个基于OBject的类,也就是准备注册到QML的类
class SingletonTypeExample : public QObject
{
Q_OBJECT //必须要
Q_PROPERTY (int someProperty READ someProperty WRITE setSomeProperty NOTIFY somePropertyChanged)//重定义变量/读/写/改方法
public:
SingletonTypeExample(QObject* parent = 0)
: QObject(parent), m_someProperty(0)
{
}
~SingletonTypeExample() {}
Q_INVOKABLE int doSomething() { setSomeProperty(5); return m_someProperty; } //Q_INVOKABLE 方便QML系统回调
int someProperty() const { return m_someProperty; }
void setSomeProperty(int val) { m_someProperty = val; emit somePropertyChanged(val); }
signals:
void somePropertyChanged(int newValue);
private:
int m_someProperty;
};
// 第二步定义一个回调类指针,用于接收回调.
static QObject *example_qobject_singletontype_provider(QQmlEngine *engine, QJSEngine *scriptEngine)
{
Q_UNUSED(engine)
Q_UNUSED(scriptEngine)
SingletonTypeExample *example = new SingletonTypeExample();
return example;
}
使用:
在C++中注册类
qmlRegisterSingletonType<SingletonTypeExample>("Qt.example.qobjectSingleton", 1, 0, "MyApi", example_qobject_singletontype_provider);
在QML中使用
import QtQuick 2.0
import Qt.example.qobjectSingleton 1.0
Item {
id: root
property int someValue: MyApi.someProperty
Component.onCompleted: {
someValue = MyApi.doSomething()
}
}