Есть ли способ добавить 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
внутри.