2011-03-19 86 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);