I have a window containing multiple QRowWidgets, which are custom widgets defined by me. These QRowWidgets contain QLineEdits and other standard widgets. To show or hide certain parts of a QRowWidget, I overdefined the focusInEvent() methodes of all the widgets within it. It works perfectly, when I click on the QRowWidget, the hidden elements appear.
The weird thing is that the blinking cursor line hovewer doesn’t appear in the QLineEdits within the custom widgets. I can select them both by a mouse click or with Tab, and a glow effect indicates that the QLineEdit is selected in it, I can select a text in it, or start typing at any location wherever I clicked, but the cursor never appears and it’s quite annoying.
My 1st thought was that it is a bug on Mac, but I have the same experience on SuSe Linux.
I’m using python 2.7 and PyQt4.
This is in the __init__() of the QRowWidget:
for i in self.findChildren(QWidget):
i.focusInEvent = self.focusInEvent
And then this is the own 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
I suspect you do not make a call to the original
focusInEvent()when you override it. Your function should look something like:where
QParentis the nearest base class for your widgets is.Either that, or make sure you call
focusInEvent()on yourQLineEditwidgets as part of your function.Given the comments, it sounds like you are dynamically reassigning the
focusInEventfunction on the insantiatations in your custom widget. I would either make a derived class for each of the widgets you use that just overridesfocusInEventas above, or include a line likein you function.