Есть ли способ предотвратить операцию скрытия панели инструментов? - PullRequest
17 голосов
/ 16 марта 2009

В Qt, если я щелкну правой кнопкой мыши на панели инструментов, появится меню, которое позволяет мне скрыть панель инструментов. Мне нужно отключить эту функцию, потому что я не хочу, чтобы панель инструментов была скрыта. Есть ли способ сделать это?

Ответы [ 5 ]

25 голосов
/ 26 января 2012

Мне удалось установить ContextMenuPolicy непосредственно на панели инструментов (не в главном окне), если я использовал Qt::PreventContextMenu или Qt::ActionsContextMenu. Prevent исключил контекстное меню и сделал так, чтобы щелчок правой кнопкой мыши не влиял на панель инструментов, в то время как Actions создал хорошее контекстное меню, состоящее из действий уже на моей панели инструментов. Qt::NoContextMenu похоже, не имеет никакого эффекта.

toolbar->setContextMenuPolicy(Qt::PreventContextMenu);

17 голосов
/ 16 марта 2009

Используйте setContextMenuPolicy (Qt :: NoContextMenu) для главного окна панели инструментов.

9 голосов
/ 24 мая 2016

Переопределить QMainWindow :: createPopupMenu (), например,

QMenu* MyApp::createPopupMenu()
{
  QMenu* filteredMenu = QMainWindow::createPopupMenu();
  filteredMenu->removeAction( mUnhidableToolBar->toggleViewAction() );
  return filteredMenu;
}

Обратите внимание, что другие ответы, предлагающие отключить контекстное меню, будут работать только в том случае, если вы хотите отключить скрытие / отображение всех панелей инструментов и всех закрепляемых виджетов.

6 голосов
/ 05 октября 2016

Есть несколько способов добиться этого без изменения функциональности contextMenu. Смотрите следующие 3 примера PySide:

1. Отключить toggleViewAction из QToolBar:

UnhidableToolBar = QToolBar()
UnhidableToolBar.toggleViewAction().setEnabled(False)

2. Подключение к visibilityChanged сигналу :

toolbar.visibilityChanged.connect(lambda: toolbar.setVisible(True))

3. Подкласс QToolBar и использовать hideEvent:

class UnhideableQToolBar(QToolBar):
    def hideEvent(self, event):
        self.setVisibile(True)

Рекомендация:

Хотя 2 и 3 довольно грязные, решение 1 показывает панель инструментов в контекстном меню, как QDockWidget, у которого установлена ​​функция DockWidgetClosable. Поэтому либо воспользуйтесь решением 1, либо, если вы хотите удалить действие, взгляните на ответ Стивена.

1 голос
/ 16 марта 2009

Унаследовать QToolbar и переопределить contextMenuEvent().

...