从qml访问同一个类实例

时间:2013-07-05 12:37:59

标签: class qml qt5

我正在使用Qt 5.1.0和QtQuick 2.0。 我刚学会了如何在qml和C ++之间交换数据和方法。详细地说,我想暴露一个(嵌套的)结构,所以我创建了包含所需属性和方法的类。

它可以工作,但我无法在C ++和qml之间共享相同的实例。从C ++方面改变一些东西导致qml方面没有变化。

一个简短的例子:

的main.cpp

#include <QtGui/QGuiApplication>
#include <QtQml>
#include "qtquick2applicationviewer.h"
#include "myclass.h"

int main(int argc, char *argv[]) {
    QGuiApplication app(argc, argv);
    qmlRegisterType<MyClass>("MyLibrary", 1, 0, "MyClass");

    MyClass *myclass = new MyClass();
    Category *cat = new Category();
    cat->setName("foo");
    myclass->append(cat);
    qDebug() << myclass->categoriesCount(); // returns 1 OK!

    QtQuick2ApplicationViewer viewer;
    viewer.setMainQmlFile(QStringLiteral("qml/main.qml"));
    viewer.show();

    return app.exec();
}

myclass.h

#include <QObject>

class Category : public QObject {
    Q_OBJECT
    Q_PROPERTY(QString name READ name WRITE setName)

public:
    Category() {}
    QString name() const { return m_name; }
    void setName(QString name) { m_name = name; }

private:
    QString m_name;
};

class MyClass : public QObject {
    Q_OBJECT
    Q_PROPERTY(QList<QObject*> categories READ categories NOTIFY categoriesChanged)
    Q_PROPERTY(int categoriesCount READ categoriesCount)

public:
    QList<QObject*> categories() const { return m_categories; }
    void clear() { m_categories.clear(); }
    void append(Category *category) { m_categories.append(category); }
    int categoriesCount() const { return m_categories.count(); }

private:
    QList<QObject*> m_categories;

signals:
    void categoriesChanged();
};

main.qml

import QtQuick 2.0
import MyLibrary 1.0

Item {
    id: root
    width: 360
    height: 360

    Text {
        id: foo
        text: myclass.categoriesCount // writes 0 -> should be 1
    }

    MyClass {
        id: myclass
    }    
}

我担心qml引擎会访问主文件中创建的类myclass的不同实例。

0 个答案:

没有答案