qtcreatorのqmenuにqwidgetを追加する方法はありますか
質問
私はテキストエディターを作成しています、そして私は QComboBox
の中に QMenu
. 。内部には方法が見つかりませんでした QMenu
それはそのようなことを処理しました。最も近いのは QMenu::addAction()
. 。私はこのハードルを回避するのだろうと思っていました。
ありがとう!
解決
サブクラスが必要です 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); //bug fixed here, pointer was missing
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);
他のヒント
QWidgetAction
aです QAction
それにはaが含まれます QWidget
. 。これを使用してカプセル化できます QComboBox
そして、それをメニューに追加します QMenu::addAction
.
いつでも使用できます QWidget
また QFrame
メニューウィジェットとして、次にaを入れます QHBoxLayout
その上に、挿入します QWidgets
中身。
所属していません StackOverflow