c++ - 如何从 qml 访问 qabstractlistmodel 派生类对象作为另一个类的属性?

标签 c++ qt qml qabstractlistmodel qqmlengine

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

我有一个派生自 qabstractlistmodel 的类用作模型。我希望此模型作为另一个类的属性,该类使用 qqmlcontextproperty 绑定(bind)到 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);
...
}

显示错误:

无法处理属性“HelperClass::todoModel”的未注册数据类型“ToDoModel”

最佳答案

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

所以在你的情况下它变成了:

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

关于c++ - 如何从 qml 访问 qabstractlistmodel 派生类对象作为另一个类的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57904756/

相关文章:

c++ - 如何在c/c++中将字符串中的字母按字母顺序排序?

python - 无法从C++中的.dat文件提取实际数据?

c++ - 使用信号/槽来避免循环依赖?

c++ - 如何将多个 slider 设置为相同的宽度

android - 在 QML 中访问 Android 系统图像

c++ - 错误 : initializer fails to determine size of ‘K’

c++ - 从挤压多边形构建多面体

c++ - Qt变量生命周期的误解

c++ - 发射信号不更新 GUI 中的值

python - 如何使用 PyQt5 在 qml 中设置值?