質問

私はテキストエディターを作成しています、そして私は 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 中身。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top