Контекстное меню вкладки QTabWidget

Мне нужно отображать контекстное меню всякий раз, когда вкладка нажата, и она должна реагировать на эту конкретную вкладку. Есть ли способ сделать это без подклассов?

2 ответов


простой способ, но, возможно, не совсем то, что вам нужно:

  1. подключение к сигналу "currentChanged" вашего QTabWidget
  2. в слоте, который подключен к сигналу, создайте QMenu и заполните его по мере необходимости
  3. наконец, в слоте, который подключен к сигналу, вызовите QMenu::exec( QCursor:: pos() )

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

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

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

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