2015-03-02 13 views
5

Non ho visto nessun segnale/slot/funzione che possa dirmi se un widget è selezionato con il mouse? È possibile avere una funzione di questo tipo per dirmi se è selezionato QWidget attuale? E come posso distinguere tra "il widget corrente è selezionato" e "uno dei suoi widget figlio è selezionato?"Qt: come rilevare se un widget è selezionato?

+1

La selezione generale di supporto 'QWidged'? –

+1

Selezionando intendete focalizzato? – Nejat

+0

@Nejat, anche questo è Ok. Quello che voglio ottenere è quando si fa clic con il mouse su un Widget, esso imposta un certo valore su 1, quando il mouse fa clic su qualsiasi altra cosa, imposta quel valore su 0. – Nyaruko

risposta

6

È possibile verificare la messa a fuoco su un widget utilizzando la funzione hasFocus(). La proprietà focus mantiene se il widget ha lo stato attivo di input della tastiera o meno. È inoltre possibile ottenere il widget corrente dell'applicazione che ha lo stato attivo utilizzando QApplication::focusWidget(). È possibile ottenere un puntatore al widget focalizzato come:

QWidget * fw = qApp->focusWidget(); 

Quando l'oggetto è stato attivato è cambiato QApplication::focusChanged(QWidget *old, QWidget *now) segnale è emitted.You possibile collegarlo ad uno slot in cui si fa quello che mai ti piace in base al cambiamento di messa a fuoco.

+0

Ho usato un qtimer per controllare l'output di hasFocus() di determinati 'customWidget' a 1Hz. Non importa quanto clicco su 'customWidget', l'output è sempre falso? – Nyaruko

+0

Vuoi dire che restituisce sempre false? Qual è il tipo di widget? – Nejat

+0

Ciao, ho scoperto che ho bisogno di impostare FocusFolicy prima che potessi concentrarmi su questo widget. Ma come posso cancellare il focus del widget corrente quando clicco da qualche altra parte (non sul widget)? Devo farlo manualmente o Qt ha alcune bandiere per questo? – Nyaruko

Problemi correlati