当我按“空格”键时,会选中所选项目之一(在我的演示者模块中调用
setData()
),这不是故意行为。我想做的是:
NoEditTriggers
:
self.ui.listView.setEditTriggers(QAbstractItemView.EditTrigger.NoEditTriggers)
并检查它在应用程序生命周期内不会重置。
所以这是主要问题:我可以禁用或控制此行为,或者它可能是 PySide6 的一个错误?
还有辅助问题:我如何追踪,哪些方法调用了setData()
?目前,我在堆栈跟踪中仅看到
setData()
。提前谢谢您!
https://qtcentre.org/threads/21332-ItemIsUserCheckable-and-checking-all-selected-items找到了我的问题的一些答案。以下是有关此主题的一些注意事项:
setEditTriggers()
不影响它);
setData()
。
keyPressEvent()
方法。例如,以下方式:
def keyPressEvent(self, event: QKeyEvent):
if event.key() == Qt.Key.Key_Space:
self._checkAllSelected()
else:
super().keyPressEvent(event)
这里 _checkAllSelected()
是新函数,它将处理项目检查。我按照以下方式实现了它:
def _checkAllSelected(self):
model = self.model()
indexes = self.selectedIndexes()
setCheckState = Qt.CheckState.Unchecked
for index in indexes:
if model.data(index, Qt.ItemDataRole.CheckStateRole) == Qt.CheckState.Unchecked:
setCheckState = Qt.CheckState.Checked
break
for index in indexes:
model.setData(index, setCheckState.value, Qt.ItemDataRole.CheckStateRole)
现在可以管理多项选择时的项目检查。