KeyEvent über editable ComboBox

Verschiedenes zu Qt
Antworten
Mati
Beiträge: 66
Registriert: 4. Januar 2006 00:11

KeyEvent über editable ComboBox

Beitrag 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
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: KeyEvent über editable ComboBox

Beitrag 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...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Mati
Beiträge: 66
Registriert: 4. Januar 2006 00:11

Beitrag von Mati »

danke ich hab eher probleme damit wie ich das event an die ComboBox binde...? ist mein problem so klar ausgedrückt :oops:
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag 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.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Mati
Beiträge: 66
Registriert: 4. Januar 2006 00:11

Beitrag 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 ?
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag 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.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Mati
Beiträge: 66
Registriert: 4. Januar 2006 00:11

Beitrag von Mati »

ah ok danke...
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Warum so kompliziert?

QComboBox hat ein QLineEdit

Code: Alles auswählen

QLineEdit * QComboBox::lineEdit () const
und QLineEdit hat ein returnPressed-Signal...
Mati
Beiträge: 66
Registriert: 4. Januar 2006 00:11

Beitrag von Mati »

danke,
habs wohl net gesagt aber die ComboBox ist NICHT auf setLineEdit geschaltet...deswegen das tratra

aber danke :)
mephistho
Beiträge: 58
Registriert: 14. September 2006 17:47

Beitrag 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!
mephistho
Beiträge: 58
Registriert: 14. September 2006 17:47

Beitrag 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.

:?
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag 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...
Antworten