В Qt 4.7, как можно добавить всплывающее меню к кнопке QToolbar? - PullRequest
14 голосов
/ 20 марта 2011

Я новичок в Qt и в настоящее время играю с Qt Creator и необработанным кодом C ++. Мне удалось заставить работать несколько простых функций, включая меню и панель инструментов, добавив объекты QAction к обоим. Однако у меня возникли некоторые трудности:

То, что я хотел бы сделать, это иметь пункт меню, который имеет подменю, например, Новый, с подменю с парой предметов, и продублируйте его на QToolbar. Я справился с этим в меню: Новый как QMenu, и пункты подменю как объекты QAction. Я не вижу, как заставить это работать на панели инструментов, например новая кнопка, которая при нажатии запускает QAction «по умолчанию» (например, первый элемент подменю), но с меньшей кнопкой меню справа, предлагающей все другие опции. Я полагаю, это аналогично кнопкам «Отменить / Повторить» на панелях инструментов Office.

Ответы [ 3 ]

23 голосов
/ 20 марта 2011

Я считаю, что QToolButton виджет должен работать нормально для того, что вы пытаетесь сделать, посмотрите, будет ли работать приведенный ниже пример:

QMenu *menu = new QMenu();
QAction *testAction = new QAction("test menu item", this);
menu->addAction(testAction);

QToolButton* toolButton = new QToolButton();
toolButton->setMenu(menu);
toolButton->setPopupMode(QToolButton::InstantPopup);
toolBar->addWidget(toolButton);

надеюсь, это поможет, с уважением

3 голосов
/ 09 апреля 2012

Ответ serge_gubenco будет работать, за исключением случаев, когда окно нужно изменить в меньшем размере, и Qt пытается поместить сам QToolButton во всплывающее меню. Это может быть не в состоянии сделать это. Смотри http://doc.qt.io/archives/qt-4.7/qtoolbar.html.

Решение заключается в использовании быстрого действия QWidgetAction, как показано ниже в модифицированном фрагменте.

QMenu *menu = new QMenu();
QAction *testAction = new QAction("test menu item", this);
menu->addAction(testAction);

QToolButton* toolButton = new QToolButton();
toolButton->setMenu(menu);
toolButton->setPopupMode(QToolButton::InstantPopup);

QWidgetAction* toolButtonAction = new QWidgetAction(this);
toolButtonAction->setDefaultWidget(toolButton);

toolBar->addAction(toolButtonAction);
2 голосов
/ 20 марта 2011

Кажется, QToolButton уже имеет какое-то подменю, которое устанавливается с помощью QToolButton::setPopupMode(ToolButtonPopupMode mode). Если я вас правильно понял, это было бы место для начала: http://doc.qt.io/archives/qt-4.7/qtoolbutton.html#ToolButtonPopupMode-enum

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...