Seite 1 von 1
QCombobox.keyPressEvent() ???
Verfasst: 26. Januar 2005 13:27
von sdaub
Hallo, wie kann ich in einer QCombobox die Eingabe von Enter abfangen?
Habe es schon so versucht
Code: Alles auswählen
class MyComboBox(QComboBox):
def keyPressEvent(self, QKeyEvent):
if QKeyEvent.ascii()==13:
if self.name() == "qcbText":
print "Hallo"
if self.name() == "qcbKonto":
print "Konto"
if self.name() == "qcbKostenstelle":
print "Kostenstelle"
Das geht ja auch theoretisch, nur wie kann ich dann jetzt wo z.B. print "Hallo" steht auf ein anderes Element meiner Anwendung zugreifen?
Danke für die Hilfe
Steffen
Verfasst: 26. Januar 2005 14:26
von FlorianBecker
Also das ist Python, oder?
In C++ machst des einfach über eine Vererbung, das ist am einfachsten damit. Ansonsten KDE hat dafür ein SIGNAL( keyPressed( QKeyEvent & ) )
Verfasst: 27. Januar 2005 09:18
von sdaub
Ja ich programmiere mit Python und Qt mit Linux:
Folgendes fuktioniert nicht:
Code: Alles auswählen
QObject.connect(self.qcbText, SIGNAL('keyPressEvent(QKeyEvent &)'),self.goEinAus)
Bekomme dann immer den Fehler : " RuntimeError: Signal has wrong argument types for slot"
Habe es schon auf viele Arten ausprobiert. Mit Python sieht der Code halt immer leicht anders aus wie mit C++, aber man findet halt kaum Beispiele dafür im Netz.
Steffen
Verfasst: 27. Januar 2005 14:23
von FlorianBecker
Mh, weiss das qtforum.org nix? Also wenn die nix haben, dann findet man das Problem meistens nirgends mehr.
Ich habe aber leider auch keine Ahnung, kenne mich da mit dem Qt & Py Zeugs ned aus.
Verfasst: 28. Januar 2005 11:34
von pm_Snake
Hab keine Ahnung von Python und QT, aber musst du nicht bei einem connect den Slot auch mitgeben
Du sagst jetzt das von self.qcbText das SIGNAL keyPressEvent mit self.goEinAus verknüpft werden soll. Aber wie heisst der Slot wo es ankommen soll?
Das nächste ist, dass keyPressEvent() kein signal sondern ein, wie es schon heisst, event ist. Du musst es einfach überschreiben:
void MyComboBox::keyPressEvent( QKeyPressEvent &e )
{
// jetz tkannst du bequem auf e zugreifen und prüfen um welche taste es sich handelt
}
Gruss
pm_Snake
Verfasst: 31. Januar 2005 09:11
von sdaub
pm_Snake hat geschrieben:Du musst es einfach überschreiben:
void MyComboBox::keyPressEvent( QKeyPressEvent &e )
{
// jetz tkannst du bequem auf e zugreifen und prüfen um welche taste es sich handelt
}
Das habe ich ja in meinem ersten Beispiel so gemacht, aber wie kann ich dann auf andere Elemente meines Programms zugreifen?
Trotzdem Danke für alle Hilfe bis jetzt.
Steffen
Verfasst: 31. Januar 2005 09:42
von FlorianBecker
Heißt was genau?
Jetzt machst du in der Funktion einen emit( QKeyEvent ) und das fängst halt da ab, wo du es brauchst!?
Verfasst: 31. Januar 2005 11:33
von sdaub
Hat sich erledigt, habe die Lösung gefunden. Ich überschreibe keyPressEvent, fange das was ich will ab und habe jetzt auch rausgefunden, wie ich auf andere Elemente zugreifen kann.
Also vielen Dank
Steffen