【发布时间】:2017-04-12 11:14:11
【问题描述】:
快速提问
是否有一种简单/快速的方法可以将 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: maintaining mapping between QModelIndex and underlying data
【问题讨论】:
标签: c++ qt qtreeview qabstractitemmodel qtwidgets