如何从 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)
    // ...