使用 QList<MyObject* 调用 setContextProperty(>



我的代码基于Qt Quick 2.0文档中的示例,从c++动态地向QML中的ListModel提供数据。

MyModel.h :

class MyObject: public QObject
{
  Q_OBJECT
  Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged)
  public:
    MyObject(QObject *parent=0);
    ~MyObject();
    QString name() const;
    void setName(const QString &name);
    QString deviceName;
  Q_SIGNALS:
    void nameChanged();
};

QML文件:

import QtQuick 2.0
ListView {
    width: 100; height: 100
    model: myModel
    delegate: Rectangle {
        height: 25
        width: 100
        Text { text: name }
    }
}

在我的Main.cpp我现在创建了一个QList<QObject *>,我填充了一些MyModel的实例,它的工作:

QList<QObject *> listElems;
listElems.append(new MyModel());
listElems.append(new MyModel());
QQmlContext *ctxt = view->rootContext();
ctxt->setContextProperty("myModel",QVariant::fromValue(listElems));

但是,如果不是使用QList<QObject *>,我使用QList<MyObject *>,那么我在加载QML时得到错误,表明属性名称未定义:

独有:视图。qml:10: ReferenceError: name is not defined

我尝试使用qRegisterMetaType<T>()qmlRegisterType<T>()没有成功。我做错了什么?

保持MyModel类和QML端相同,只需更改以下部分:

#include <qqml.h>
qmlRegisterUncreatableType<MyModel>("MyModel", 1, 0, "MyModel", "Instanciated C++ side !");
QVariantList listElems;
listElems.append(QVariant::fromValue(new MyModel()));
listElems.append(QVariant::fromValue(new MyModel()));
view->rootContext()->setContextProperty("myModel",QVariant::fromValue(listElems));

当然还有QML中的' import MyModel 1.0 '。

相关内容

  • 没有找到相关文章

最新更新