Seite 1 von 1
KeyEvent über editable ComboBox
Verfasst: 5. Juli 2006 21:20
von Mati
Hallo,
steh irgendwie die ganze Zeit auf dem Schlauch...
Ich habe eine editierbare ComboBox in der man also selbst Text reinschreiben kann.
Jetzt will ich dass der user erst den Text schreibt und erst dann ein event gefeuert wird wenn er auf "Enter" haut. Aus dem event will ich dann natürlich den Text auslesen.
Natürlich habe ich in der Doku QKeyEvent mir angeschaut. Nur weiß ich die Realisierung bezüglich der Entereingabe nicht...soll ich da überprüfen mit if QKeyEvent::key() == "Enter" oder so?
Vielleicht gibt es irgendwo ein kleines Beispiel...in den Trolltech examples konnte ich nichts finden....
Danke für Eure Hilfe
Re: KeyEvent über editable ComboBox
Verfasst: 5. Juli 2006 21:30
von Christian81
Mati hat geschrieben: Nur weiß ich die Realisierung bezüglich der Entereingabe nicht...soll ich da überprüfen mit if QKeyEvent::key() == "Enter" oder so?
Schonmal ausprobiert? Sollte funktionieren...
Verfasst: 5. Juli 2006 21:35
von Mati
danke ich hab eher probleme damit wie ich das event an die ComboBox binde...? ist mein problem so klar ausgedrückt

Verfasst: 5. Juli 2006 21:49
von Christian81
Also entweder Du leitest von QCombobbox ab und reimplementierst void QWidget::keyPressEvent ( QKeyEvent * event ) oder benutzt void QObject::installEventFilter ( QObject * filterObj ). Ich würde wohl den eventFilter benutzen. In der Doku ist da auch ein kleines Beispiel zu finden.
Verfasst: 5. Juli 2006 21:54
von Mati
danke...habs so versucht und es passiert was:
Bei ComboBox erstellung
cb->installEventFilter(this);
Code: Alles auswählen
void
UIMainWindow::test(QKeyEvent * e)
{
//std::cout << user_zoom_text.toStdString() << std::endl;
std::cout << e->key() << std::endl;
}
bool UIMainWindow::eventFilter(QObject *obj, QEvent *ev){
if(obj == cb_zoom){
if(ev->type() == QEvent::KeyPress){
QKeyEvent *k = (QKeyEvent *)ev;
if((k->key() == Qt::Key_Return) || (k->key() == Qt::Key_Enter))
test(k);
return true;
}
else{
return false;
}
}
else{
return QMainWindow::eventFilter(obj, ev);
}
}
bei Enter auf die ComboBox erscheint der int-Wert vom Enter - kann es richtig sein mit: 16777220
???
Ist meine vorgehensweise so korrekt?
seltsam ist nur dass wenn ich auf installEventFilter gehe ....dann ist die ComboBox nicht mehr editierbar also ich kann dann keinen user input starten...gibts dafür ne Lösung ?
Verfasst: 5. Juli 2006 22:09
von Christian81
0x01000005 == 16777220 == Qt::Key_Enter, also korrekt (siehe qnamespace.h)
Wegen dem anderen Problem - Du 'isst' jeden KeyPress event, hast also nicht genau aufgepasst und wirklich wie im Beispiel einen KeyEater geschreiben. Gib immer false zurück dann ists ok.
The eventFilter() function must return true if the event should be filtered, (i.e. stopped); otherwise it must return false.
Verfasst: 5. Juli 2006 22:13
von Mati
ah ok danke...
Verfasst: 6. Juli 2006 16:45
von upsala
Warum so kompliziert?
QComboBox hat ein QLineEdit
und QLineEdit hat ein returnPressed-Signal...
Verfasst: 6. Juli 2006 17:10
von Mati
danke,
habs wohl net gesagt aber die ComboBox ist NICHT auf setLineEdit geschaltet...deswegen das tratra
aber danke

Verfasst: 24. November 2006 11:27
von mephistho
Heyho,
feiner Thread, ziemlich das, was ich gesucht hab
Ich möchte in meiner ComboBox auf "Del" reagieren und damit Items aus der ComboBox löschen.
Das klappt im Moment nur, wenn ein Item ausgewählt ist. Ich hätte es aber gern schon beim highlighten. Also ComboBox öffnen -> Maus auf zu löschendes Item halten -> Del drücken -> Item weg.
Gibts da ne simple Lösung?
Danke!
Verfasst: 11. Dezember 2006 15:37
von mephistho
Ich muss mich spezialisieren:
Ich hätte es ganz gerne ausschließlich beim highlighten. Ansonsten werden die Items schon gelöscht, wenn man nur mal die Eingabe korrigieren möchte.

Verfasst: 11. Dezember 2006 16:43
von upsala
Tja, könnte etwas aufwendig werden:
keyPressEvent der ComboBox abfangen, feststellen ob die View sichtbar ist, abfragen welches Item unter der Maus liegt. Im Model löschen...