Есть ли способ добавить QWidget в QMenu в QtCreator

Я создаю текстовый редактор, и я бы хотел поставить QComboBox на QMenu. Я не нашел никакого метода внутри QMenu это обработало такую вещь. Ближайший QMenu::addAction(). Мне было интересно обойти это препятствие.

спасибо!

3 ответов


вы должны подкласс QWidgetAction а затем просто позвоните addAction в меню.

пример кода для действия Spin Box с меткой

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);

QWidgetAction это QAction, которая содержит QWidget. Вы можете использовать это для инкапсуляции вашего QComboBox и добавить его в меню через QMenu::addAction.


вы всегда можете использовать QWidget или QFrame в качестве виджета меню, затем поставить QHBoxLayout на нем, и вставить QWidgets внутри.