2009-09-30 9 views

Répondre

5

façon simple, mais peut-être pas exactement ce dont vous avez besoin:

  1. Connectez au signal « currentChanged » de votre QTabWidget
  2. Dans la fente qui est reliée au signal, créer un QMenu et le remplir au besoin
  3. Enfin, dans la fente qui est reliée au signal, appelez QMenu :: exec (QCursor :: pos())

Ce obtiendrai une fonction appelée chaque fois que l'onglet est modifiée (non Nece ssairement cliqué) et générer un menu à la position actuelle de la souris.

manière compliquée, qui fait exactement ce que vous décrivez:

  1. Appel QObject::installEventFilter sur votre QTabWidget, de sorte que tous les événements de votre QTabWidget sont redirigés vers votre propre objet.
  2. Dans votre propre objet, réimplémentez QObject::customEvent et gérez tous les événements QMouseEvent.
  3. Remplissez un QMenu si nécessaire et appelez QMenu :: exec à l'emplacement du QMouseEvent que vous gérez.
+0

Votre première solution facile ne fonctionne pas comme il le souhaite. Le menu contextuel ne sera pas affiché si le clic de souris est fait sur l'onglet actuel. La seule solution semble être la deuxième. –

0

Je pense que vous devez créer votre propre classe qui hérite de QTabWidget et remplacer la fonction protégée MousePressEvent (QMouseEvent) dans laquelle vous pouvez créer votre menu contextuel sur un clic droit.

+0

-1 puisqu'il a spécifiquement demandé un moyen de réaliser ce qu'il veut sans sous-classer QTabWidget. –

+2

S'il n'est pas familiarisé avec installEventFilter, l'héritage est un moyen plus simple. Mais laissez-le essayer votre première solution en premier. –