调整 QListView 的点击行为?
Tweak QListView behaviour on click?
当您有 QListView
并单击视图中的项目时,默认行为是取消选择(取消选择)任何现有的选定项目,然后将单击的项目设置为选定以及“当前 item/index”。
我该如何更改才能使这样的点击对选择没有影响,但会将点击的项目设置为“当前 item/index”?
NB 实验表明视图的 selectionChanged
槽在视图的 clicked
信号触发之前被调用。因此,一种解决方法是记录取消选择的项目(在 selectionChanged
插槽中可用)并在检测到(即时)点击已被触发时再次将选择应用于这些项目。但这会很笨拙:是否有更优雅的方式可用?
多亏了 musicamante 的评论,我才能够设计出我想要的东西:
def mousePressEvent(self, event):
if self.selectionModel() and event.modifiers() == QtCore.Qt.NoModifier:
pos = event.pos()
index = self.indexAt(pos)
if index.isValid():
self.selectionModel().setCurrentIndex(index, QtCore.QItemSelectionModel.Current)
return
super().mousePressEvent(event)
...允许按 Ctrl 键单击、按住 Shift 键单击等行为正常,但调整未修改的单击的正常行为。
当您有 QListView
并单击视图中的项目时,默认行为是取消选择(取消选择)任何现有的选定项目,然后将单击的项目设置为选定以及“当前 item/index”。
我该如何更改才能使这样的点击对选择没有影响,但会将点击的项目设置为“当前 item/index”?
NB 实验表明视图的 selectionChanged
槽在视图的 clicked
信号触发之前被调用。因此,一种解决方法是记录取消选择的项目(在 selectionChanged
插槽中可用)并在检测到(即时)点击已被触发时再次将选择应用于这些项目。但这会很笨拙:是否有更优雅的方式可用?
多亏了 musicamante 的评论,我才能够设计出我想要的东西:
def mousePressEvent(self, event):
if self.selectionModel() and event.modifiers() == QtCore.Qt.NoModifier:
pos = event.pos()
index = self.indexAt(pos)
if index.isValid():
self.selectionModel().setCurrentIndex(index, QtCore.QItemSelectionModel.Current)
return
super().mousePressEvent(event)
...允许按 Ctrl 键单击、按住 Shift 键单击等行为正常,但调整未修改的单击的正常行为。