Hi Volker, Am Montag, 26. September 2005 12:36 schrieb Volker Lenhardt: > > I tried installing the event filter in the dialog itself without a > special Combo class: no effect at all.
This version works as expected for me: #!/usr/bin/env python # # focusouttest.py # import sys from qt import * try: from qtpe import QPEApplication as QApplication except: pass class Dlg(QDialog): def __init__(self): QDialog.__init__(self, None, None, True, 1) self.setCaption("FocusOut Test") self.playerList=["", "Pete", "Volker"] self.wCmbList=[] self.layout=QVBoxLayout(self) self.placeEdit=QLineEdit(self) self.layout.addWidget(self.placeEdit) for i in range(4): cmb=QComboBox(True, self) cmb.setDuplicatesEnabled(False) cmb.lineEdit().installEventFilter(self) for p in self.playerList: cmb.insertItem(p) self.wCmbList.append(cmb) self.layout.addWidget(cmb) def eventFilter(self, o, e): if e and o: if e.type()==QEvent.FocusOut: for cmb in self.wCmbList: if o==cmb.lineEdit(): print "bingo" #QMessageBox.information(self, "Info", "Bingo") return False if __name__=="__main__": app=QApplication(sys.argv) QObject.connect(app, SIGNAL('lastWindowClosed()'), app, SLOT('quit()')) win = Dlg() app.setMainWidget(win) win.show() app.exec_loop() > And with the special class there is no difference whether installing > the filter in the dialog or in the Combo class. It get double message > boxes and segmentation fault. Notes: - I removed the Combo class, but it would be pretty straight forward to transform.. - You need to install the eventFilter on the lineEdit() in this case, and I admit, event filtering on Qt container widgets involves a bit of voodoo (but at least it should be consistent across platforms, which is _the_ horror other toolkits often suffer from..). - If you use focus event impacting GUI functions inthe event handler, don't wonder about multiple focus events. - The QComboBox duplicatesEnabled property has the wrong default IMHO. I've no idea, where your segfault came from, but it could be a reentrancy problem in QPE. If you cannot use print, how about using a log file, or do something focus agnostic or handle the mess.. Pete _______________________________________________ PyKDE mailing list PyKDE@mats.imk.fraunhofer.de http://mats.imk.fraunhofer.de/mailman/listinfo/pykde