Seite 1 von 1

Problem mit setSelection() unter QT

Verfasst: Dienstag 31. August 2010, 19:03
von ws
Hallo,

ich habe ein Problem mit der setSelection()-Methode von QLineEdit im Zusammenhang mit Qt.

Ich habe, vereinfacht gesagt, ein Python-Widget mit QVBoxLayout, in das ich zwei QLineEdit-Instanzen packe. Ich möchte gerne einen Teil des Textes im zweiten QLineEdit selektieren, so dass er markiert dargestellt wird. Das scheint in diesem Fall aber nur für den obersten QLineEdit zu funktionieren; sobald ich versuche, etwas in dem zweiten QLineEdit zu selektieren, passiert gar nichts, d.h. der Text wird ganz normal dargestellt (s. Demo unten) Das ganze tritt auf sowohl unter Python2.5 mit Qt 4.3.1 als auch unter Python2.6 mit Qt 4.4.3 (WIN 7/64)

Kennt jemand dieses Problem und hat vielleicht einen Workaround?

Für jede Hilfe dankbar

Wolfgang


Code: Alles auswählen

from PyQt4 import QtGui

class SetSelectionTestDlg(QtGui.QDialog):

    def __init__(self, parent=None):
        QtGui.QDialog.__init__(self, parent)
        layout = QtGui.QVBoxLayout()
        topLineEdit = QtGui.QLineEdit("topLineEdit")
        bottomLineEdit = QtGui.QLineEdit("bottomLineEdit")
        layout.addWidget(topLineEdit)
        layout.addWidget(bottomLineEdit)
        self.setLayout(layout)

        # Das hier funktioniert, solange topLineEdit als
        # erstes über addWidget() zu layout hinzugefügt wird
        # topLineEdit.setSelection(0, 3)

        # Das hier funktioniert nicht, solange bottomLineEdit
        # nicht als erstes über addWidget() zu layout hinzugefügt wird
        bottomLineEdit.setSelection(0, 3)


if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    sstd = SetSelectionTestDlg()
    result = sstd.exec_()


Re: Problem mit setSelection() unter QT

Verfasst: Dienstag 31. August 2010, 19:23
von Hyperion
Das ist ein ganz normales Verhalten. Markiert sein kann immer nur das Widget, welches den Focus hat. Kannst Du übrigens auch mal manuell ausprobieren in Deinem Beispiel! Wenn Du etwas in einem QLineEdit markierst, verschwindet die Markierung im anderen.

Ergänze mal Deinen (einkommentierten) Quelltext um das hier:

Code: Alles auswählen

        bottomLineEdit.setFocus()
Damit funzt es - unabhängig irgendwelcher Layout-Sachen; diese haben damit nichts zu tun.

Re: Problem mit setSelection() unter QT

Verfasst: Dienstag 31. August 2010, 19:30
von ws
Hallo Hyperion,

vielen Dank, das hat geholfen. Wahrscheinlich bekommt immer das erste QLineEdit implizit den Fokus in dem Beispiel.

Auf jeden Fall nochmal vielen Dank

Wolfgang