如何将 QListWidget / QStandardItemModel 项映射到我的逻辑?
How to map the QListWidget / QStandardItemModel item to my logic?
快速提问
是否有一种简单/快速的方法可以将QListWidget
或QStandardItemModel
(用于QListView
)项映射到我的应用程序逻辑?
完整问题
注意:我将不明确地使用
QListWidget
或QListView及其QStandardItemModel。从我目前对这个问题的看法来看,从一个切换到另一个是微不足道的。
我通常需要在HMI中有一个QListView
或等效项,它显示一些文本值,需要在选择/单击时做出反应。
在SLOT
中,为了执行所需的操作,需要标识行。Qt::DisplayRole
是不合适的,因为某些文本可能会重复,并且QStrings不是识别计算机科学数据的最佳方式。
// Click on a row
connect( &myView, &QListView::clicked,
[&myView, this]( const QModelIndex &idx)
{
// E.G. need to update the database for this row. Which row?
});
可能的解决方案:
- 维护一个
map
以从QModelIndex
行中检索 ID。 - 在模型行中保存任何ID,便于应用任何操作。
第一个选项很乏味:它需要连接模型以保持地图和模型同步。同样的逻辑一次又一次。
第二种选择似乎是迄今为止最好的:我保存(例如数据库 ID)并在之后使用它;但是,QListView
模型(据我所知)不包括这个非常友好和有用的ID。所以直到现在,我已经一次又一次地扩展了QListView
模型。
如何将 QModelIndex 映射回我的应用程序逻辑?我真的必须为这个简单的操作扩展模型吗?
相关问题:QTreeView:维护QModelIndex和底层数据之间的映射
手动创建QAbstractModel怎么样,这样您就可以完全控制QModelIndexes的创建方式,并且可以使用它来做一些事情。
我已经实现了数千个Qt模型,我从来不喜欢QStandardItemModel方法,因为我通常需要编写比我自己使用模型更多的样板文件。
- 从您的 QAbstractList/Table/TreeModel 继承
- 实现索引()
- 创建直接项目访问的方法
.
// Click on a row
connect( &myView, &QListView::clicked,
[&myView, this]( const QModelIndex &idx)
{
auto& myItem = idx.model()->directAccess(idx.row());
});
- 利润。
相关文章:
- 我如何获取从 C++ 到 C 的映射<字符串、int>#
- 为什么我的DLL只能注入手动映射
- 我的boost managed_shared_memory在离开作用域时似乎不会从内存空间中取消映射
- 为什么我的纹理加载到OpenGL中,未正确映射
- 如何将 QListWidget / QStandardItemModel 项映射到我的逻辑?
- 我的 A* 实现无法正确跟踪"camefrom"映射
- 我如何将输入分配给在 for 循环中设置的映射功能
- 为什么我的结构中映射的构造函数不起作用
- C++-如果我使用映射,我的对象会被删除两次吗
- C++映射是否可以包含指向我的任意类的指针
- 我的 lambda 表达式进行映射键比较有什么问题?
- 我什么时候应该首选写入组合 CUDA 分配的映射主机内存
- C++ 内存泄漏与我的 std::映射 &对象和标准::矢量 &对象
- 声明一个以我自己的类作为值类型的映射
- 我的简单数独程序内存映射错误
- 为什么我的函数指针映射没有编译?
- 为什么我的JNA结构映射产生奇怪的字段值
- 为什么我的键被覆盖时,插入一个对象到映射
- 当我将类字符串变量放入另一个类的映射中时,类字符串变量将失去它的值
- 关于GDI映射在我的教科书的例子