1

我正在设计一个包含 3 个列表的 qml 页面。我希望数据作为来自 cpp 的模型显示在这些列表中。我可以将所有这 3 个模型作为单个类的属性吗?

我有一个从 qabstractlistmodel 派生的类用作模型。我希望这个模型作为另一个类的属性,它使用 qqmlcontextproperty 绑定到 qml。

IE。我可以将这个模型作为一个属性来访问。

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'

4

2 回答 2

1

像 QAbstractListModel 这样的 QObject 不会被复制,因此在这种情况下,您必须返回指针。所以一般来说,如果 T 是一个 QObject ,那么如果你将它公开为一个属性,它必须是Q_Property(T* name ...).

因此,在您的情况下,它更改为:

class HelperClass : public QObject
{
    Q_OBJECT
    Q_PROPERTY(ToDoModel* todoModel READ todoModel CONSTANT)
    // ...
于 2019-09-12T15:15:31.573 回答
0

您可以使用朋友类来允许访问其他类的私有和受保护成员

于 2019-09-12T14:17:10.903 回答