11

QComboBoxテキストエディタを作成していますが、をに入れたいと思いQMenuます。そのようなことを処理するメソッドは、内部に見つかりませんでしQMenuた。最も近いのはQMenu::addAction()です。私はこのハードルを回避することを考えていました。

ありがとう!

4

3 に答える 3

19

サブクラス化してから、メニューを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);
于 2011-12-02T16:23:08.557 に答える
2

QWidgetActionQAction含むQWidgetです。これを使用して、をカプセル化し、QComboBoxを介してメニューに追加できますQMenu::addAction

于 2011-12-02T16:23:33.177 に答える
1

いつでもQWidgetまたはQFrameをメニューウィジェットとして使用し、その上に配置して、内部 QHBoxLayoutに挿入することができます。QWidgets

于 2011-12-02T16:12:26.223 に答える