我的代码基于Qt Quick 2.0 文档中ListModel
的示例,以从 C++ 动态地向我的 QML中的 a 提供数据。
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 *>
我不使用 a而不是使用 a ,QList<MyObject *>
那么在加载 QML 时会出现错误,指示未定义属性名称:
qrc:view.qml:10: ReferenceError: name is not defined
我尝试使用qRegisterMetaType<T>()
但 qmlRegisterType<T>()
没有成功。我究竟做错了什么?