我有一个包含多个QRowWidget
的窗口,这是我定义的自定义窗口小部件。这些QRowWidget
包含QLineEdit
个和其他标准小部件。为了显示或隐藏QRowWidget
的某些部分,我过度定义了其中所有小部件的focusInEvent()
方法。它完美无缺,当我点击QRowWidget
时,会出现隐藏的元素。
奇怪的是,闪烁的光标线hovewer没有出现在自定义小部件的QLineEdit
中。我可以通过鼠标单击或Tab键选择它们,发光效果表示在其中选择QLineEdit
,我可以在其中选择文本,或者在我点击的任何位置开始输入,但是光标永远不会出现,而且很烦人。
我的第一个想法是它是Mac上的一个错误,但我在SuSe Linux上有相同的经验。
我正在使用python 2.7和PyQt4。
这是__init__()
的{{1}}:
QRowWidget
然后这是自己的 for i in self.findChildren(QWidget):
i.focusInEvent = self.focusInEvent
:
focusInEvent()
答案 0 :(得分:1)
我怀疑你覆盖它时没有拨打原始focusInEvent()
。您的功能应该类似于:
def focusInEvent(self,...):
QParent.focusInEvent(self,...)
# the rest of your code
其中QParent
是您的小部件最近的基类。
要么是这样,要么确保在focusInEvent()
小部件上调用QLineEdit
作为功能的一部分。
鉴于评论,听起来您在自定义小部件中的动态上动态重新分配focusInEvent
函数。我会为你使用的每个小部件创建一个派生类,只是覆盖focusInEvent
,如上所述,或者包含一行如
type(self).focusInEvent(self,..)
你的功能。