gpt4 book ai didi

c++ - 在 Qt 5.0 中将 QAbstractListModel 元素属性公开给 QML

转载 作者:太空狗 更新时间:2023-10-29 19:59:18 25 4
gpt4 key购买 nike

我一直在松散地关注 Christophe Dumez's blog 上的文章获取自定义 QAbstractListModel 类以将数据公开给 QML (QtQuick2) 接口(interface) (QtQuick2ApplicationViewer)。但是,由于我使用的是 Qt 5.0.0(和 MSVC2012),他文章中的某些部分不适用。例如,ListModel 构造函数不再需要调用 setRoleNames(),因为 setRoleNames() 在 Qt 5 中已弃用。

ListModel::ListModel(ListItem* prototype, QObject *parent) :
QAbstractListModel(parent), m_prototype(prototype)
{
setRoleNames(m_prototype->roleNames());
}

据我了解,继承自QAbstractListModel的类必须只定义roleNames(),因为它在Qt 5中已更改为纯虚函数。所以在他的示例中,我只是注释掉构造函数中的 setRoleNames(m_prototype->roleNames()); 一切都应该有效。对吧?

但是,当通过 QML 访问时,所有已定义的角色都是未定义的。我可以用这个检查 C++ 中的名称:

QHash<int, QByteArray> mynames = model->find("Elephant")->roleNames();
qDebug() << "Model: " << mynames;

在这种情况下,Elephant 对象的角色名称按预期打印。

我的假设是否正确,或者我是否需要做其他事情来获得 QAbstractListModel 对象以与 QML2 共享列表元素属性?这似乎是一个愚蠢的问题,但 Qt5 文档现在太烂了,我想不通。

谢谢!

最佳答案

您需要重新实现 QAbstractListModel::roleNames() const 方法,您的角色会自动在 QML 中注册。

examples/quick/modelviews/abstractitemmodel 中有一个将基于 QAbstractListModel 的模型暴露给 QML 的工作示例。

您还可以考虑使用 QQmlListProperty .

关于c++ - 在 Qt 5.0 中将 QAbstractListModel 元素属性公开给 QML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14031412/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com