C'è un modo per aggiungere un Qwidget a un Qmenu in QtCreator
Domanda
Sto creando un editor di testo e vorrei mettere il QComboBox
nel QMenu
. Non ho trovato alcun metodo all'interno del QMenu
Ciò ha gestito una cosa del genere. Il più vicino è QMenu::addAction()
. Mi chiedevo di aggirare questo ostacolo.
Grazie!
Soluzione
Devi sottoclasse QWidgetAction
e poi semplicemente chiama il addAction
al tuo menu.
Codice di esempio per l'azione della casella di spin con un'etichetta
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;
};
Ora semplicemente crealo e aggiungilo al tuo menu
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);
Altri suggerimenti
QWidgetAction
è un QAction
che contiene un QWidget
. Puoi usarlo per incapsulare il tuo QComboBox
e aggiungilo al tuo menu tramite QMenu::addAction
.
Puoi sempre usare un QWidget
o QFrame
Come widget del menu, quindi mettere un QHBoxLayout
su di esso e inserisci il tuo QWidgets
dentro.