2009-09-30 38 views

risposta

5

modo semplice, ma forse non proprio quello che vi serve:

  1. Collegare al segnale 'CurrentChanged' della vostra QTabWidget
  2. Nello slot che è collegato al segnale, creare un QMenu e popolarlo come necessario
  3. Infine, nella fessura che è collegato al segnale, chiamare QMenu :: exec (QCursor :: pos())

questo otterrà una funzione chiamata ogni volta che si modifica la scheda (non nece cliccato di soppiatto) e genera un menu nella posizione corrente del mouse.

modo complicato, che fa esattamente ciò che si descrive:

  1. chiamata QObject::installEventFilter sul QTabWidget, in modo che tutti gli eventi sul tuo QTabWidget vengono reindirizzati al proprio oggetto.
  2. Nel proprio oggetto, reimplementare QObject::customEvent e gestire tutti gli eventi QMouseEvent.
  3. Compilare un QMenu secondo necessità e chiamare QMenu :: exec nella posizione del QMouseEvent che si sta gestendo.
+0

La tua prima soluzione facile non funziona come vuole. Il menu contestuale non verrà visualizzato quando il clic del mouse viene eseguito nella scheda corrente. L'unica soluzione sembra essere la tua seconda. –

0

Penso che sia necessario creare la propria classe che eredita da QTabWidget ed eseguire l'override della funzione protetta MousePressEvent (QMouseEvent) in cui è possibile creare il menu di scelta rapida con il tasto destro del mouse.

+0

-1 poiché ha chiesto specificamente un modo per ottenere ciò che desidera senza sottoclasse QTabWidget. –

+2

Se non ha familiarità con installEventFilter, l'ereditarietà è un modo più semplice. Lascia che provi prima la tua seconda soluzione. –

Problemi correlati