2009-09-30 2 views

ответ

5

Легкий способ, но, возможно, не совсем то, что вам нужно:

  1. Подключение к сигналу «currentChanged» вашего QTabWidget
  2. В слот, который подключен к сигналу, создать QMenu и заполнить его при необходимости
  3. Наконец, в слот, который подключен к сигналу, вызовите QMenu :: Exec (QCursor :: поз())

Это позволит получить функцию с именем всякий раз, когда вкладка изменяется (не nece ssarily clicked) и создайте меню в текущей позиции мыши.

сложный путь, который точно делает то, что вы описали:

  1. вызов QObject::installEventFilter на вашем QTabWidget, так что все события на вашем QTabWidget перенаправляются на ваш объект.
  2. В своем собственном объекте переопределите QObject::customEvent и обработайте все события QMouseEvent.
  3. Заполните QMenu при необходимости и вызовите QMenu :: exec в позиции QMouseEvent, которую вы обрабатываете.
+0

Ваше первое легкое решение не работает так, как он хочет. Контекстное меню не будет отображаться, щелчок мышью осуществляется на текущей вкладке. Единственное решение, похоже, ваше второе. –

0

Мне кажется, вам нужно создать свой собственный класс, который наследуется от QTabWidget и переопределить функцию MousePressEvent (QMouseEvent), в которой вы можете создать свое контекстное меню по правому клику.

+0

-1, так как он специально попросил способ достичь желаемого без подкласса QTabWidget. –

+2

Если он не знаком с installEventFilter, наследование является более простым способом. Но пусть сначала попробует ваше второе решение. –