2011-03-19 70 views
14

我是Qt的新手,目前在玩Qt Creator和原始C++代码。我设法通过向两者添加QAction对象来获得一些简单的功能,包括菜单和工具栏。然而,我有一些困难:在Qt 4.7中,如何将弹出菜单添加到QToolbar按钮?

我想要做的是有一个菜单选项,其中有一个子菜单,例如,新增功能,带有一个项目的子菜单,并在QToolbar上复制它。我在菜单中管理它:新建为QMenu,子菜单项作为QAction对象。我看不到如何让它在工具栏中工作,例如一个新按钮,点击后,它将运行“默认”QAction(如第一个子菜单项),但右侧有一个较小的菜单按钮,提供所有其他选项。我想这与Office工具栏上的撤销/重做按钮类似。

回答

22

我相信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); 

希望这会有所帮助,至于

2

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); 
相关问题