问题标签 [qabstractlistmodel]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
qt - 从另一个更新 ListView
我正在制作一个纸牌游戏,它有 4 个卡槽,每个卡槽容量为 5。我ListView
用来代表每个插槽。让我先解释代码,然后再解释我的问题。
ClientCardModel
具有将代码和其他成员传输到 QML的ClientCard
for和角色列表。ListView
让我ListView
用一个区域(如 zone1、zone2 等)来表示每个。在游戏中,一张卡可以与其他区域的其他卡一起装备。卡上装备的卡存放在 中QSet<> equipped
,卡上装备的卡存放在 中equipTarget
。当将鼠标悬停在区域中的卡片上时,应使用图像突出显示其他区域中装备它的卡片,直到鼠标停留在卡片上。
任何想法都值得赞赏。
qml - 从 QML 访问嵌套的 QAbstractListModel
我QAbstractListModel
在 C++ 中有一个分层(嵌套),即模型的项目是Outer
模型的实例,Inner
类的项目Inner
是一些QObject
派生的Data
实例。Outer
具有submodel
访问Inner
项目的角色。
相应的 QML 代码将 a 嵌套Repeater
在 aListView
中。ListView
正确迭代类型的项目,我可以检索委托中模型实例Inner
的项目计数。
我遇到的问题是just 不会迭代模型的实例。在 C++ 模型的方法中使用调试打印输出我看到Inner
ListView
Repeater
Data
Inner
- QML 查询but
rowCount()
的实例Inner
- QML 从不调用
data()
.Inner
QML 代码如下所示:
qt - 这是 Qt Quick ComboBox 中的错误吗?
我用来在 Qt QuickQAbstractListModel
中创建自定义模型。ComboBox
头文件中的代码:
源文件中的代码:
我使用以下方法将其公开到 QML 中:
并使用此模型创建一个 ComboBox:
data()
此代码运行完美,但请查看源文件函数中的这一行:
我认为在设置textRole
of之后ComboBox
,显示角色应该命名为“显示”,这是Display
我的自定义模型中的角色m_roleNames.insert(Display, "display");
。但这并不总是正确的。
这是qDebug()<<
上面代码的输出:
1
1
行 0 角色 260 大小 1
显示:“1.8.0_51 64bit”
和
1
1
行 0 角色 0 大小 1
显示:“1.8.0_51 64bit”
两个输出随机出现。您会发现role
传递给data()
函数的参数有时会为零。零角色Qt::DisplayRole
在 Qt中的意思。
所以这是我的问题:如果 set textRole
ofComboBox
意味着data role
设置等于 textRole 的值。为什么data role
有时会变成 Qt::DisplayRole
?它是一个错误ComboBox
吗?
qt - QComboBox 选择时和下拉菜单中的不同项目值
如何轻松制作双人 QAbstractListModel × QComboBox(不重新实现 QComboBox)
这样选择时的项目表示与 DropDownList 上的表示不同
背景:
我有模型(继承自QAbstractListModel),它使其他模型派生的QAbstractItemModel变平,但是它代表树结构
项目的顺序与树模型中的顺序相同
我想缩进它们,以便更好地选择方向,
但是一旦选择,它看起来很奇怪,当唯一选定的项目缩进时
即具有这种结构(我逐字假设它在 QComboBox DropDown列表中被看到
并且一旦选择,我希望它只显示
现在它显示
---> subChild 1.3.2
据我所知,这两种表示都通过 model::data(index, role=Qt::DisplayRole),所以我无法在那里区分它们
PS:如果有一些类似 QComboBox 的直接使用包含树的模型,那就更好了
c++ - QAbstracktListModel 由 QAbstractListModel 组成。如何实施?
我需要 List witch 包含列表。它不是一棵树。所以问题是我需要从 QML 动态获取新的数据模型。我可以QAbstractItemModel
在 in 中实现和使用TreeView
吗?如何实施?我的想法为零(
c++ - QML - 实现 C++ ListModel 的最佳方式
目前我在 QML 中定义了一个 ListModel,每个 ListElement 中有许多不同的字段。委托根据“myType”值以不同的方式做出反应。
当 ListView 组件完成后,我从名为“Config”的 C++ 类中读取了一些配置值。
当 listView 完成后,我需要将编辑后的数据传递给 C++。所以我意识到这不是在 QML 中构建模型的最佳方式。所以我计划用 C++ 创建模型,但我以前从未这样做过。所以我的问题是:哪种模型结构最适合这个用例,但设置起来不太复杂?
还是有另一种不太难看的方法将 QML 模型中的数据放到 c++ 上下文中?
c++ - removeRows() 和 QPersistentModelIndex
我已经实现了我自己的QAbstractListModel
,它基于std::vector
. 我现在想在QGraphicsScene
. 为此,我实现了我自己的QGraphicsItem
,它将 a 存储QPersistentModelIndex
为指向数据的指针。
我已经实现了removeRows
如下方法:
现在由于我擦除了一些元素,因此以下元素的索引将发生变化。因此QPersistentModelIndex
需要进行调整。
我已经找到了changePersistentIndex()
方法,QAbstractItemModel
并且我知道我可以使用persistentIndexList()
. 但是我不知道如何使用这种方法相应地调整索引。如何才能做到这一点?
更改这些索引是否足以防止Invalid index
错误?
更新
我已经removeRows()
用@Sebastian Lange 的增强功能改变了它,但是它仍然没有按预期工作并且我收到Invalid index
错误:
发出的错误如下所示(删除第 7 个元素时):
qt - Qt QAbstractItemModel 函数 data() 以未定义的角色调用
我想使用创建自定义列表QListView
,因此我必须扩展QListView
,QItemDelegate
然后QAbstractListModel
实现特定方法,以及QAbstractItemModel::data(const QModelIndex & index, int role = Qt::DisplayRole) const
. 乍一看它在屏幕上正确显示,但在填充列表模型后出现问题。,该函数被每个具有不同角色data(index,role)
的项目模型调用 4-5 次(其中一些未定义角色/超出范围/可能是随机的)。而且它不仅发生在列表模型初始化之后!当我悬停一个列表元素时,视图会使用正确的索引和角色调用 data(index,role),但之后会再次使用意外的角色值调用它。
这似乎是一种尴尬的行为。我找不到奇怪电话的来源。我将日志放入自定义类的每个方法中,以确保我不会错误地调用data(index,role)
具有错误值的方法。
有没有人有一些想法在哪里看或为什么会发生这种奇怪的电话?
编辑 “奇怪”调用的来源在:
以某种方式调用QItemDelegate::sizeHint()
它时会触发data()
具有不同角色值的触发器。
在我的例子中,我定义了从 0(0,1,2,3) 开始的角色值。根据@Jens,这些值是保留的。更改自定义角色的起始值解决了我的问题。
c++ - 如何将 QAbstractListModel 中的项目信号绑定到 ListView 委托中的处理程序
我有一个QAbstractListModel
后代类,MyItem
里面有我的任意类型的实例列表。我也有一个ListView
与该QAbstractListModel
后代绑定的模型。
我要做的就是将委托中的处理程序绑定ListView
到我的任意类型的信号MyItem
。有什么办法吗?
UPD。我不想将委托绑定到模型的信号,所以当我有很多项目时,所有项目都会被触发。我只想用信号通知一位代表。
c++ - QAbstractListModel 到 Combobox,如何在选择值 b 时获取值 a
我做了非常简单的 QAbstractListModel 例子。这个例子也在这个链接上展示:http: //doc.qt.io/qt-5/qtquick-models-abstractitemmodel-example.html。一个程序结果是这样的:
程序结果 我在 view.qml 上做了一点改变,像这样
在这里,Combobox 显示动物类型。但我想在 onCurrentTextChanged 事件时写入“大小”值。但我无法获得类型值。