2009-09-30 10 views

Respuesta

5

manera fácil, pero posiblemente no exactamente lo que necesita:

  1. Conectar a la señal 'CurrentChanged' de su QTabWidget
  2. En la ranura que está conectado a la señal, crear un QMenu y rellenarla según sea necesario
  3. por último, en la ranura que está conectado a la señal, llame QMenu :: exec (QCursor :: pos())

esta manera se consigue una función llamada cada vez que se cambia la pestaña (no nece solo se hizo clic) y generan un menú en la posición actual del mouse.

forma complicada, lo que hace exactamente lo que usted describe:

  1. llamada QObject::installEventFilter en su QTabWidget, de modo que todos los eventos de su QTabWidget son redirigidos a su propio objeto.
  2. En su propio objeto, vuelva a implementar QObject::customEvent y maneje todos los eventos de QMouseEvent.
  3. Complete un QMenu según sea necesario y llame a QMenu :: exec en la ubicación del QMouseEvent que está gestionando.
+0

Su primera solución fácil no funciona como él quiere. El menú contextual no se mostrará, el clic del mouse se hace en la pestaña actual. La única solución parece ser la segunda. –

0

Creo que necesita crear su propia clase que hereda de QTabWidget y anular la función protegida MousePressEvent (QMouseEvent) en la que puede crear su menú contextual con el botón derecho.

+0

-1 ya que específicamente pidió una forma de lograr lo que quiere sin subclasificar QTabWidget. –

+2

Si no está familiarizado con el installEventFilter, la herencia es una manera más fácil. Pero déjale probar tu segunda solución primero. –

Cuestiones relacionadas