首页 > 代码库 > QML 与 C++ 交互之工厂方法
QML 与 C++ 交互之工厂方法
QML 与 C++ 交互之工厂方法
先看例如以下的类声明,声明了一个产品类和工厂类。
#include <QObject>
class Productor : public QObject
{
Q_OBJECT
Q_PROPERTY(int age READ age WRITE setAge NOTIFY ageChanged)
public:
explicit Productor(QObject *parent = 0);
int age() const;
void setAge(int age);
signals:
void ageChanged();
private:
int m_age;
};
class QQmlEngine;
class QJSEngine;
class Factory : public QObject
{
Q_OBJECT
public:
Factory(QObject* parent);
Q_INVOKABLE Productor* create();
static QObject *singleton(QQmlEngine *engine, QJSEngine *scriptEngine);
};
c++ main 函数中注冊方式例如以下:
qmlRegisterType<Productor>("FactoryDemo", 1, 0, "Productor");
qmlRegisterSingletonType<Factory>("FactoryDemo", 1, 0, "Factory", &Factory::singleton);
Productor
注冊为类型,Factory
注冊为单例。在 QML 中使用例如以下:
import QtQuick.Controls 1.2
import FactoryDemo 1.0
Button {
text: qsTr("user create function")
onClicked: {
var p = Factory.create();
console.log(p.age);
}
}
语法补全和智能提示
因为 QtCreator 对 QML 函数的返回值类型支持不佳,所以无法对 p
进行代码的智能提示。
这个时候就能够使用属性与 QOjbect*
来 hack 一下了。
仅仅需改动一行代码。且看例如以下:
class Factory : public QObject
{
Q_OBJECT
Q_PROPERTY(Productor* newCreate READ create )
...
};
仅仅需加入一行属性声明的代码就可以。
qml 使用例如以下。能够进行代码补全。
var p2 = Factory.newCreate;
console.log(p2.age);
QML 与 C++ 交互之工厂方法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。