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

È stato utile?

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.

  1. QComboBox sottoclasse.
    Override keyPressEvent(): prima QComboBox::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.

  2. Implementare una nuova classe che eredita QObject. In questa classe, ignorare eventFilter(): 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 al QComboBox. Collegare uno slot per il segnale di questa istanza, che si implementato.

Se questi non sono chiari, vi consiglio di leggere le pagine seguenti:

Utilizzando widget personalizzati con Qt Designer

Qt Eventi & filtri eventi

Altri suggerimenti

Si potrebbe anche prendere in considerazione il segnale activated( const QString& ). Potrebbe essere emesso quando l'utente preme entrare.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top