如何从 qml 访问 qabstractlistmodel 派生的 class 对象作为另一个 class 的 属性?
How to access qabstractlistmodel derived class object as a property of another class from qml?
我正在设计一个由 3 个列表组成的 qml 页面。我希望数据作为来自 cpp 的模型显示在这些列表中。我可以将所有这 3 个模型作为单个 class.
的属性吗
我有一个派生自 qabstractlistmodel 的 class 用作模型。我希望这个模型作为另一个 class 的 属性 使用 qqmlcontext属性.
绑定到 qml
即。我可以作为 属性.
访问此模型
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'
您可以使用 friend class 允许访问其他 class
的私有和受保护成员
QObject,如QAbstractListModel,不会被复制,所以在那种情况下你必须return指针。所以一般来说,如果 T 是 QObject 那么如果你将它公开为 属性 它必须是 Q_Property(T* name ...)
.
所以在你的情况下它变成了:
class HelperClass : public QObject
{
Q_OBJECT
Q_PROPERTY(<b>ToDoModel*</b> todoModel READ todoModel CONSTANT)
// ...
我正在设计一个由 3 个列表组成的 qml 页面。我希望数据作为来自 cpp 的模型显示在这些列表中。我可以将所有这 3 个模型作为单个 class.
的属性吗我有一个派生自 qabstractlistmodel 的 class 用作模型。我希望这个模型作为另一个 class 的 属性 使用 qqmlcontext属性.
绑定到 qml即。我可以作为 属性.
访问此模型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'
您可以使用 friend class 允许访问其他 class
的私有和受保护成员QObject,如QAbstractListModel,不会被复制,所以在那种情况下你必须return指针。所以一般来说,如果 T 是 QObject 那么如果你将它公开为 属性 它必须是 Q_Property(T* name ...)
.
所以在你的情况下它变成了:
class HelperClass : public QObject
{
Q_OBJECT
Q_PROPERTY(<b>ToDoModel*</b> todoModel READ todoModel CONSTANT)
// ...