Catturare eventi di modifica del testo in un QComboBox
Domanda
Sto sviluppando un'applicazione Qt su Red Hat Linux. Voglio catturare Carriage Return eventi di pressione dei tasti in un QComboBox
.
Ho collegato uno slot per la editTextChanged()
segnale che viene emesso per ogni pressione di un tasto, ma non per il tasto Invio .
Perchè così? C'è un altro modo per rilevare I ritorni
Soluzione
Io parto dal presupposto che hai scritto uno slot e collegato al QComboBox::editTextChanged()
segnale.
Questo segnale viene attivato quando le modifiche al testo e Invio non cambia il testo, lo accetta. Se si desidera catturare Carriage Return , ci sono un certo numero di modi che si possono seguire.
-
QComboBox
sottoclasse.
OverridekeyPressEvent()
: primaQComboBox::keyPressEvent()
chiamata e quindi verificare se il tasto premuto è Invio . Se lo è, emettere un segnale.
Utilizzare questa sottoclasse ogni volta che è necessario. Ricerca per promuovere i widget in QDesigner se non si sa come. -
Implementare una nuova classe che eredita
QObject
. In questa classe, ignorareeventFilter()
: verificare se l'evento è un tasto. Se lo è, controllare se è la chiave Invio . Se lo è, emettere un segnale.
Quindi, creare un'istanza di questa classe e impostarlo come filtro evento alQComboBox
. Collegare uno slot per il segnale di questa istanza, che si implementato.
Se questi non sono chiari, vi consiglio di leggere le pagine seguenti:
Altri suggerimenti
Si potrebbe anche prendere in considerazione il segnale activated( const QString& )
. Potrebbe essere emesso quando l'utente preme entrare.