菜單項的定製,QWidgetAction的使用——Qt

前言

有時候需要菜單項顯示的不僅是簡單的文字,需要顯示一個控件或界面,這時候QWidgetAction該上場了。

 

代碼和效果

QWidgetAction繼承的QAction,有QAction一切功能,在此基礎上增加了將自定義的widget插入基於action的容器。我看了QWidgetAction的幫助文檔,就幾個方法:

public:
QWidget *defaultWidget() const
void releaseWidget(QWidget *widget)
QWidget *requestWidget(QWidget *parent)
void setDefaultWidget(QWidget *widget)

protected:
virtual QWidget *createWidget(QWidget *parent)
QList<QWidget *> createdWidgets() const
virtual void deleteWidget(QWidget *widget)

若是隻是在菜單項上顯示定製的Widget,那麼常用的方法更少:用setDefaultWidget將定製的widget插入到action中,若需要則用defaultWidget獲取該widget的指針。

若是將QWidgetAction添加到QToolBar,那麼就會調用createWidget()。我們可以重新實現這個函數創建自定義的widget。createdWidgets獲取所有的由createWidget創建的widget的容器。

我這裏只用實現了最常用的QWidgetAction作爲菜單項:按鈕點擊,顯示菜單。MenuWidget 爲我自定義的widget。

    connect(m_pIconLabel,&QPushButton::clicked,this,&TitleBar::showCustomMenu);
    m_pMyMenu=new QMenu(this);
    m_pShowWidgetAction=new QWidgetAction(this);

    MenuWidget *widget=new MenuWidget(this);
    widget->setFixedSize(400,350);
    m_pShowWidgetAction->setDefaultWidget(widget);
    m_pMyMenu->addAction(m_pShowWidgetAction);

顯示菜單和常規的一樣的,位置由自己決定

void TitleBar::showCustomMenu()
{
    //Q_UNUSED(pos);
     QWidget *pWindow = this->window();
    int x=pWindow->geometry().x()+this->geometry().x();
    int y=pWindow->geometry().y()+this->height()+3;
    QPoint pos(x,y);
    m_pMyMenu->exec(pos);
}

 效果圖:

 

結束語

好了,就這麼菜單項的定製就這麼簡單。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章