Is there a way to add a QWidget to a QMenu in QtCreator

后端 未结 3 2151
小蘑菇
小蘑菇 2021-02-14 04:02

I\'m creating a text editor and I\'d like to put the QComboBox in the QMenu. I didn\'t find any method inside the QMenu that handled such

相关标签:
3条回答
  • 2021-02-14 04:18

    You can always use a QWidget or QFrame as the Menu Widget, then put a QHBoxLayout on it, and insert your QWidgets inside.

    0 讨论(0)
  • 2021-02-14 04:28

    QWidgetAction is a QAction that contains a QWidget. You can use this to encapsulate your QComboBox and add it to your menu via QMenu::addAction.

    0 讨论(0)
  • 2021-02-14 04:32

    You have to subclass QWidgetAction and then simply call the addAction to your menu.

    Example code for Spin Box Action with a label

    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;
    };
    

    Now simply create it and add it to your 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);
    
    0 讨论(0)
提交回复
热议问题