我使用Qt 5.6和QStandardItemModel填充QStandardItem来显示数据表。
有些项是启用的,有些是不启用的。
只能选择启用的项(这是正常行为)。
但是当数据更新时,一些项目的启用状态可能会改变,这就是我的问题的根源。考虑以下场景:
1 an item is enabled
2 the user select it
3 the item is selected
4 the data are updated, the item is now disabled
5 the item remain selected, despite it is disabled
现在,用户可以与禁用的项目进行交互:打开上下文菜单,编辑它…
它有一些"更新"方法在Qt模型/视图框架,我可以调用更新选定的状态后,一个标志的变化?
或者是否有任何简单的(通用的)方法来解决这个问题,对于我所有的项目视图?(不是所有的都是表,不是所有的都基于QStandardItem)
谢谢
EDIT:这似乎不起作用,因为启用的属性不是数据,而是一个标志,编辑它不应该触发命名信号。挂在!
如何连接信号
void QStandardItemModel:itemChanged(QStandardItem * item)
加上一些像
这样的辅助代码void fixSelection(QStandardItem * item)
{
if (item.isEnabled()) {
// remove item from selection model of view...
}
}
罢工 有关QItemSelectionModel
的一些信息,请参阅此处。
如果数据被修改,您也可以考虑清除模型的整个选择。这将为您节省额外的工作量。我不知道哪个操作可能会禁用选择项下的某些项,以及哪个后续操作希望在先前采取的选择上工作。