Вопрос

Я создаю текстовый редактор и хотел бы положить 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 это QAction это содержит QWidget. Анкет Вы можете использовать это, чтобы инкапсулировать ваш QComboBox и добавьте его в свое меню через QMenu::addAction.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top