我創建一個文本編輯器,我想放QComboBox
在QMenu
。我在QMenu
內部找不到處理這種事情的任何方法。最靠近的是QMenu::addAction()
。我想知道繞過這個障礙。有沒有一種方法,以一個QWidget添加到QMenu在QtCreator
謝謝!
我創建一個文本編輯器,我想放QComboBox
在QMenu
。我在QMenu
內部找不到處理這種事情的任何方法。最靠近的是QMenu::addAction()
。我想知道繞過這個障礙。有沒有一種方法,以一個QWidget添加到QMenu在QtCreator
謝謝!
你必須繼承QWidgetAction
,然後只需調用addAction
到您的菜單。對於旋轉框行動
示例代碼與標籤
class SpinBoxAction : public QWidgetAction {
public:
SpinBoxAction (const QString& title) :
QWidgetAction (NULL) {
QWidget* pWidget = new QWidget (NULL);
QHBoxLayout* pLayout = new QHBoxLayout();
QLabel pLabel = new QLabel (title);
pLayout->addWidget (pLabel);
pSpinBox = new QSpinBox(NULL);
pLayout->addWidget (pSpinBox);
pWidget->setLayout (pLayout);
setDefaultWidget(pWidget);
}
QSpinBox * spinBox() {
return pSpinBox;
}
private:
QSpinBox * pSpinBox;
};
現在,只需創建它,並把它添加到您的菜單
SpinBoxAction * spinBoxAction = new SpinBoxAction(tr("Action Title"));
// make a connection
connect(spinBoxAction ->spinBox(), SIGNAL(valueChanged(int)),
this, SLOT(spinboxValueChanged(int)));
// add it to your menu
menu->addAction(spinBoxAction);
您可以隨時使用QWidget
或QFrame
作爲Menu Widget,然後在其上放置一個QHBoxLayout
,並在其中插入您的QWidgets
。
這個想法實際上發生在我身上。我對Qt有點新奇,所以請原諒我,如果這是基本的話:我如何設置我自己的QWidget作爲Menu Widget。 –
QWidgetAction
是QAction
包含QWidget
。您可以使用它來封裝您的QComboBox
並通過QMenu::addAction
將其添加到您的菜單。
你爲什麼喜歡繼承QWidgetAction?它不會提供更鬆散的耦合和更多可維護的代碼來實例化一個QWidgetAction與你的'pWidget'分開並調用'setDefaultWidget'嗎?子類的唯一理由不是實現'createWidget'嗎? –
這取決於。如果你想有可重用的小部件操作,並避免重寫相同的代碼部分來創建它們,你應該繼承它們。例如,我曾經需要一個帶有標籤的多個旋鈕框的QMenu,以及不同的最小/最大值和前綴。通過繼承'QWidgetAction',我能夠擁有一個可重用的元素,並且在任何情況下我只需要更改構造函數參數。創建一個帶有動作小部件的小型圖書館也很簡單,只需在需要時撥打所需的圖書館即可。 – pnezis
我不familar用這種構造的:'SpinBoxAction(常量QString的職銜): QWidgetAction(NULL){}' –