Привязать полученный из QAbstractListModel элемент listmodel объекта в QML как Q_PROPERTY

Я выяснил, как представить и связать экземпляр производной модели списка QAbstractListModel с / в QML.

Но то, что я действительно хочу сделать, это представить объект в QML и связать член, который является производной моделью списка QAbstractListModel, как Q_PROPERTY.

Я попробовал это так:

class MyObject : public QObject
{
Q_OBJECT
Q_PROPERTY(MyListModel myListModel READ myListModel NOTIFY myListModelChanged)

public:
explicit MyObject(QObject *parent = 0);
MyListModel *myListModel();

signals:
void myListModelChanged();

public slots:

private:
MyListModel *m_myListModel;

};MyObject::MyObject(QObject *parent) :
QObject(parent)
{
m_myListModel = new MyListModel(this);
}

MyListModel *MyObject::myListModel()
{
return m_myListModel;
}

class MyListModel : public QAbstractListModel {
Q_OBJECT
//...
//...
}

int main(int argc, char *argv[])
{
QGuiApplication a(argc, argv);

QQuickView *view = new QQuickView();
MyObject *myObject = new MyObject();

view->engine()->rootContext()->setContextProperty("myObject", myObject);
view->setSource(QUrl::fromLocalFile("main.qml"));
view->show();

return a.exec();
}

Rectangle {
width: 200
height: 200

//...
//...

ListView {
id: myListView
anchors.fill: parent
delegate: myDelegate
model: myObject.myListModel
}
}

Но я получаю ошибку компиляции:

E: \ Qt \ Qt5 \ 5.1.1 \ mingw48_32 \ include \ QtCore \ qglobal.h: 946: ошибка: ‘QAbstractListModel& QAbstractListModel :: operator = (const QAbstractListModel&) ‘является частным
Учебный класс &оператор = (постоянный класс &) Q_DECL_EQ_DELETE;
^

Как правильно сделать это?

4

Решение

Объекты типа QAbstractItemModels не могут быть скопированы, вы должны использовать указатель. Я бы использовал:

Q_PROPERTY(MyListModel* myListModel READ myListModel CONSTANT)

Поскольку вы не заменяете саму модель, а только ее содержимое, вам не нужен сигнал myListModelChanged (), и вы можете пометить его как CONSTANT,

Ваш геттер уже имеет правильный тип, хотя он должен быть постоянным:

MyListModel *MyObject::myListModel() const
7

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

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

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