Я основал свой код на примерах, найденных в documentation of Qt Quick 2.0, чтобы предоставлять данные в ListModel
в моем QML динамически из C++.Вызов setContextProperty() с QList <MyObject*>
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, указывающее, что имя свойства не определено:
qrc:view.qml:10: ReferenceError: name is not defined
Я попытался с помощью qRegisterMetaType<T>()
и qmlRegisterType<T>()
без успеха. Что я делаю не так?
Можете ли вы предоставить источник QML (или его часть) вместе с точной ошибкой? Вы уверены, что в вашем QML определен «audioInputDeviceInfoView»? Я не думаю, что вам нужно использовать qRegisterMetaType. – ChrisR
@ChrisR Я добавил QML и ошибку. Если у вас установлены примеры qt5, вы можете попробовать его в «examples/quick/models/objectlistmodel». Если вы замените в Main.cpp QList на QList , вы получите ту же ошибку –
koopajah
Я не специалист и проблемы с Qt/QML. Может ли помочь одна из двух ссылок (даже если она предназначена для Qt4.8 вместо 5.0, она должна работать в основном): http://qt-project.org/doc/qt-4.8/qdeclarativemodels.html#exposing-c- data-models-to-qml http://cdumez.blogspot.com/2010/11/how-to-use-c-list-model-in-qml.html – ChrisR