Вызов setContextProperty () с помощью QList & lt; MyObject * & gt;

Я основал свой код на примерах, найденных в документация по Qt Quick 2.0 предоставить данные ListModel в моем QML динамически из C ++.

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: имя не определено

Я пытался с помощью qRegisterMetaType<T>() а также qmlRegisterType<T>() безуспешно. Что я делаю неправильно?

0

Решение

Сохраняйте класс 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));

И, конечно, «импортировать MyModel 1.0» в QML.

И это должно работать!

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]