删除虚线边框而不在Windows PyQt中设置NoFocus

Cry*_*ite 17 qt focus border pyqt

关于这一点有几个问题,所有这些似乎都说除去虚线边框的唯一方法是将有问题的widget/item上的focusPolicy设置为NoFocus.虽然这可以作为临时修复,但这可以防止在其他必要的focusEvents领域与所述小部件/项目进一步交互.

所述边界有问题:

虚线焦点? 边界

这是为什么这不起作用的一个例子.

  • 我有一个非模态小部件弹出窗口,想象一个图像的灯箱.
  • 我想在窗口小部件外部检测mousePressEvent并因此关闭窗口小部件.要做到这一点,我应该抓住focusOutEvent.
  • 但是,如果我的程序中的绝大多数小部件被设置为NoFocus(以消除边界问题),那么我无法捕获focusOutEvent,因为您猜对了,它们没有焦点策略.

这是另一个例子:

  • 我有一个子类的QTreeWidget,所以我可以出于各种原因捕获keyPressEvents.
  • QTreeWidget也设置为NoFocus以防止边框.但是,由于这个原因,小部件永远不会有焦点,因此不能捕获keyPressEvents.
  • 这个(kludgy,imo)的解决方法是使用小部件的grabKeyboard类,如果我以后忘记释放Keyboard,这是危险的.这不是最佳选择.

那么问题是,有没有办法删除这个奇怪的(大多数只是丑陋的)虚线边框而不关闭我的应用程序中的所有内容的焦点?提前致谢!

Des*_*sh_ 42

设置outline: 0所需的对象.请参阅以下示例,其中将其设置为a QTableView.

QTableView
{
    outline: 0;
}
Run Code Online (Sandbox Code Playgroud)

适用于QAbstractItemView继承的类.(QTreeWidget, QTableWidget等).令人惊讶的是,QT文档中未提及此CSS属性.请参阅QT样式表参考文档.

  • 这就是圣洁的神.坚持你的QTreeView风格,你是金. (5认同)
  • 这也适用于QAbstractButton继承类,例如QPushButton,QRadioButton和QCheckBox.刚才在我的C++ Qt应用程序中使用它.大! (2认同)

jdi*_*jdi 5

在OSX上你可以做到 QWidget.setAttribute(QtCore.Qt.WA_MacShowFocusRect, False).关于Win或Linux不确定.您可能必须通过样式表来完成.