web-dev-qa-db-fra.com

qt QWidget cliquez

J'ai ma propre classe basée sur QWidget. J'ai mis ce widget dans QMainWindow et j'ai besoin d'un clic de souris sur ce widget.

J'ai essayé:

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

Mais rien ne se passe. Comment puis-je le faire?

24
0xAX

QWidget n'a pas de signal clicked () et QMainWindow n'a pas de slot exit (). Il est impossible de se connecter à un signal inexistant et à un emplacement inexistant. La valeur de retour de la connexion doit être true si la connexion réussit. Vérifiez cette valeur lorsque vous établissez des connexions pour vous assurer que votre code fonctionnera correctement.

Pour quitter votre application, vous devez appeler qApp->quit()

De plus, comme cela a été mentionné par d'autres, vous devrez installer un eventFilter ou réimplémenter le

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

ou

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

méthodes.

Il y a beaucoup d'exemples dans la documentation officielle de Qt, this par exemple réimplémente la méthode mousePressEvent(QMouseEvent *event).

Pour l'option eventFilter, voir this petit exemple.

J'espère que cela t'aides.

35
Live

Un QWidget n'a pas de signal clicked. Pour que cela fonctionne, utilisez des événements. Tous les widgets prennent en charge les événements, il y a donc du travail manuel à faire, mais pas beaucoup:

  1. Remplacez la fonction event de votre widget (que vous dérivez de QWidget
  2. Répondre aux événements de type QEvent:: MouseButtonPress

Vous pouvez également ajouter une méthode eventFilter.

Google les classes et méthodes que j'ai mentionnées pour les exemples de code et pour arriver à une solution complète en fonction de vos besoins exacts.

9
Eli Bendersky