0

我有一个包含多个QRowWidgets 的窗口,它们是我定义的自定义小部件。这些QRowWidgets 包含QLineEdits 和其他标准小部件。为了显示或隐藏 a 的某些部分QRowWidget,我超定义了focusInEvent()其中所有小部件的方法。它工作得很好,当我点击 时QRowWidget,隐藏的元素就会出现。

奇怪的是,闪烁的光标线没有出现在QLineEdit自定义小部件的 s 中。我可以通过单击鼠标或使用 Tab 来选择它们,并且发光效果表明QLineEdit在其中选择了,我可以在其中选择文本,或者在我单击的任何位置开始输入,但光标永远不会出现,它是很烦人。

我的第一个想法是它是 Mac 上的一个错误,但我在 SuSe Linux 上也有同样的经历。

我正在使用 python 2.7 和 PyQt4。

这是__init__()QRowWidget

   for i in self.findChildren(QWidget):
        i.focusInEvent = self.focusInEvent

然后这是自己的focusInEvent()

def focusInEvent(self, event):
    if self.pself.focusedLine:
        self.pself.focusedLine.setStyleSheet("color: #666;")
        self.pself.focusedLine.desc.hide()
        self.pself.focusedLine.closebutton.hide()
    self.setStyleSheet("color: #000;")
    self.desc.show()
    self.closebutton.show()
    self.pself.focusedLine = self
4

1 回答 1

1

focusInEvent()我怀疑您在覆盖原始文件时没有调用它。您的函数应类似于:

 def focusInEvent(self,...):
     QParent.focusInEvent(self,...)
     # the rest of your code

QParent您的小部件最近的基类在哪里。

要么,要么确保你调用focusInEvent()你的QLineEdit小部件作为你的函数的一部分。

鉴于评论,听起来您正在动态地重新分配focusInEvent自定义小部件中实例化的功能。我会为您使用的每个小部件创建一个派生类,这些小部件只是focusInEvent如上所述覆盖,或者包括一行

type(self).focusInEvent(self,..)

在你的功能。

于 2013-01-02T14:29:24.107 回答