QML 与 C++ 交互之工厂方法

来源:互联网 发布:js object 增加属性 编辑:程序博客网 时间:2024/05/01 15:58

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_OBJECTpublic:    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.2import FactoryDemo 1.0Button {    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);

这里写图片描述

1 0
原创粉丝点击