【问题标题】:How to remove focus from QListWidget item如何从 QListWidget 项中移除焦点
【发布时间】:2018-05-27 07:06:43
【问题描述】:

我正在使用 PySide,并且我有一个 QListWidget。我制作了一个虚拟项目并将其放在 QListWidget 的顶部。我这样做是为了在工具第一次打开时,默认情况下没有选择有用的项目。我不喜欢这个空项目被“突出显示”,向用户显示项目。我怎样才能摆脱这个大纲/亮点?我将附上问题的图片:

【问题讨论】:

  • 你说的让它看起来是活跃的或被选中的是什么意思?
  • 所以你看到新纹理框顶部空白点周围的虚线轮廓了吗?红色箭头所指的地方。我希望那个大纲消失。
  • 我试图重现这种行为,但在我的情况下它不会生成它。这就是为什么我要求您提供minimal reproducible example
  • 供参考。这是我的代码的一部分。它被编写为在带有超阴影纹理的 Maya 会话中运行。

标签: python focus selection pyside qlistwidget


【解决方案1】:

您可以通过 item-delegate 来实现:

class NoFocusDelegate(QStyledItemDelegate):
    def paint(self, painter, option, index):
        option.state = QStyle.State_None
        super(NoFocusDelegate, self).paint(painter, option, index)

self.listWidget.setItemDelegateForRow(0, NoFocusDelegate(self))

但是,更好的解决方案是摆脱虚拟项目并通过设置无效的当前索引来清除焦点:

self.listWidget.setCurrentIndex(QModelIndex())

现在不会突出显示任何项目,currentItem() 将返回 NonecurrentRow() 将返回 -1,直到用户明确选择项目。

【讨论】:

  • 再次感谢,Ekhumoro。 QmodelIndex 线完美运行。我不能说我完全理解它为什么会起作用,但它解决了问题并且我摆脱了虚拟物品!我批准了这个答案。
猜你喜欢
  • 1970-01-01
  • 2016-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多