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!

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top