Как получить доступ к объекту производного класса 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)
// ...
Вы можете использовать класс друзей, чтобы разрешить доступ к закрытым и защищенным членам другого класса.