Мне нужно отображать контекстное меню всякий раз, когда нажимается вкладка, и ему нужно реагировать на эту конкретную вкладку. Есть ли способ сделать это без подклассификации?Вкладка контекстного меню вкладки QTabWidget
ответ
Легкий способ, но, возможно, не совсем то, что вам нужно:
- Подключение к сигналу «currentChanged» вашего QTabWidget
- В слот, который подключен к сигналу, создать QMenu и заполнить его при необходимости
- Наконец, в слот, который подключен к сигналу, вызовите QMenu :: Exec (QCursor :: поз())
Это позволит получить функцию с именем всякий раз, когда вкладка изменяется (не nece ssarily clicked) и создайте меню в текущей позиции мыши.
сложный путь, который точно делает то, что вы описали:
- вызов QObject::installEventFilter на вашем QTabWidget, так что все события на вашем QTabWidget перенаправляются на ваш объект.
- В своем собственном объекте переопределите QObject::customEvent и обработайте все события QMouseEvent.
- Заполните QMenu при необходимости и вызовите QMenu :: exec в позиции QMouseEvent, которую вы обрабатываете.
Мне кажется, вам нужно создать свой собственный класс, который наследуется от QTabWidget и переопределить функцию MousePressEvent (QMouseEvent), в которой вы можете создать свое контекстное меню по правому клику.
-1, так как он специально попросил способ достичь желаемого без подкласса QTabWidget. –
Если он не знаком с installEventFilter, наследование является более простым способом. Но пусть сначала попробует ваше второе решение. –
Ваше первое легкое решение не работает так, как он хочет. Контекстное меню не будет отображаться, щелчок мышью осуществляется на текущей вкладке. Единственное решение, похоже, ваше второе. –