2010-10-26 8 views
18

Ho una mia classe basata su QWidget. Metto questo widget in QMainWindow e ho bisogno di catturare il clic del mouse su questo widget.qt QWidget click

ho provato:

connect(my_widget, SIGNAL(clicked()), this, SLOT(exit(0))); 

Ma nulla sta accadendo. Come posso farlo?

risposta

26

QWidget non ha un segnale di clic() e QMainWindow non ha uno slot di uscita(). È impossibile connettersi a un segnale inesistente e uno slot inesistente. Il valore restituito della connessione deve essere true se la connessione ha esito positivo. Controlla questo valore quando effettui le connessioni per assicurarti che il tuo codice funzioni correttamente.

Per uscire l'applicazione, è necessario chiamare qApp->quit()

Inoltre, come è stato detto da altri, si dovrà installare un eventFilter o reimplementare il

void QWidget::mousePressEvent (QMouseEvent * event) [virtual protected] 

o

void QWidget::mouseReleaseEvent (QMouseEvent * event) [virtual protected] 
metodi

.

Ci sono molti esempi nel documento ufficiale di Qt, this, ad esempio, reimplement il metodo mousePressEvent(QMouseEvent *event).

Per l'opzione eventFilter, vedere l'esempio this.

Spero che questo aiuti.

5

A QWidget non ha il segnale clicked. Per farlo funzionare, usa gli eventi. Tutti i widget supportano gli eventi, quindi non c'è un po 'di lavoro manuale da fare, ma non molto:

  1. ignorare la funzione event per il widget (che si deriva da QWidget
  2. rispondere a eventi di tipo QEvent:: MouseButtonPress

In alternativa, aggiungi un metodo eventFilter.

Google le classi e i metodi che ho citato per i campioni di codice e per arrivare a una soluzione completa a seconda del tuo esatto ds.