Как получить доступ к объекту производного класса qabstractlistmodel как свойству другого класса из qml?

Я разрабатываю qml-страницу, состоящую из 3 списков. Я хочу, чтобы данные отображались в этих списках как модель из cpp. Могу ли я иметь все эти 3 модели как свойства одного класса.

У меня есть класс, производный от qabstractlistmodel, для использования в качестве модели. Я хочу, чтобы эта модель была свойством из другого класса, который привязан к qml с помощью qqmlcontextproperty.

т.е. Я мог бы получить доступ к этой модели как к собственности.

class ToDoModel : public QAbstractListModel
{
    Q_OBJECT
    ...
}

class HelperClass : public QObject
{
    Q_OBJECT
    Q_PROPERTY(ToDoModel todoModel READ todoModel CONSTANT)
public:
    explicit HelperClass(QObject *parent = nullptr);

    ToDoModel* todoModel() const;

signals:

public slots:

private:
    ToDoModel *_todoModel;
};

int main(int argc, char *argv[])
{
HelperClass helperClass;
engine.rootContext()->setContextProperty(QStringLiteral("helperClass"), &helperClass);
...
}

Показывает ошибку:

Unable to handle unregistered datatype 'ToDoModel' for property 'HelperClass::todoModel'

2 ответа

Решение

QObject, как и QAbstractListModel, не копируется, поэтому в этом случае вы должны вернуть указатель. Итак, в общем, если T является QObject, то, если вы выставляете его как свойство, он должен бытьQ_Property(T* name ...).

Итак, в вашем случае он меняется на:

class HelperClass : public QObject
{
    Q_OBJECT
    Q_PROPERTY(ToDoModel* todoModel READ todoModel CONSTANT)
    // ...

Вы можете использовать класс друзей, чтобы разрешить доступ к закрытым и защищенным членам другого класса.

Другие вопросы по тегам