Есть ли способ добавить Qwidget в Qmenu в Qtcreator
Вопрос
Я создаю текстовый редактор и хотел бы положить 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
внутри.