Контекстное меню вкладки QTabWidget
Мне нужно отображать контекстное меню всякий раз, когда вкладка нажата, и она должна реагировать на эту конкретную вкладку. Есть ли способ сделать это без подклассов?
2 ответов
простой способ, но, возможно, не совсем то, что вам нужно:
- подключение к сигналу "currentChanged" вашего QTabWidget
- в слоте, который подключен к сигналу, создайте QMenu и заполните его по мере необходимости
- наконец, в слоте, который подключен к сигналу, вызовите QMenu::exec( QCursor:: pos() )
Это получит функцию, вызываемую всякий раз, когда вкладка изменяется (не обязательно нажата) и spawn меню в текущем положение мыши.
сложный способ, который точно делает то, что вы описали:
- вызов QObject:: installEventFilter на вашем QTabWidget, так что все события на вашем QTabWidget перенаправляются на ваш собственный объект.
- в свой собственный объект, переопределить QObject:: customEvent и обрабатывать все события QMouseEvent.
- заполните QMenu по мере необходимости и вызовите QMenu:: exec в позиции QMouseEvent вы обращение.
Я думаю, вам нужно создать свой собственный класс, который наследуется от QTabWidget и переопределить защищенную функцию MousePressEvent(QMouseEvent), в которой вы можете создать контекстное меню при щелчке правой кнопкой мыши.