Qt自定義菜單項


經常會看到一些菜單的部分項是由幾個按鈕組成的,如酷狗、QQ、360都有類似菜單,對於常規的菜單項,圖標 + 文字 實現一個事件,很容易完成,那么怎么自定義菜單項呢?

imageimage

 

Qt提供了支持,就是利用QWidget + QWidgetAction來完成。QWidgetAction繼承自QAction,無法通過繼承來實現一個界面,但它提供了setDefaultWidget來綁定一個界面,使用起來就更加方便了。

下面實現一個沒有Action的菜單,並通過按鈕顯示出來:

void UserMenu::CreateMenu()
{
    //播放項
    QWidgetAction *pWdtAction = new QWidgetAction(this);
    //播放項界面,繼承自QWidget的類
    PlayWidget *playWdt = new PlayWidget(this);
    pWdtAction->setDefaultWidget(playWdt);
 
        
    //創建一個包含聲音調整控件的界面項
    QWidgetAction *pVoice = new QWidgetAction(this);
    QWidget *pVoiceWdt = new QWidget(this);
    QSlider *pSlider = new QSlider(Qt::Horizontal);
    QHBoxLayout *layout = new QHBoxLayout(pVoiceWdt);
    layout->addWidget(pSlider);
    pVoiceWdt->setLayout(layout);
    pVoice->setDefaultWidget(pVoiceWdt);
    
    //生成菜單欄
    QMenu *pMenu = new QMenu(this);
    pMenu->addAction(pWdtAction);
    pMenu->addSeparator();
    pMenu->addAction(pVoice);
    pMenu->addAction(QStringLiteral("顯示歌詞"));
    pMenu->addAction(QStringLiteral("鎖定歌詞"));
    pMenu->addSeparator();
    pMenu->addAction(QStringLiteral("選項設置"));
    pMenu->addSeparator();
    pMenu->addAction(QStringLiteral("登陸"));
    pMenu->addAction(QStringLiteral("退出"));
 
        
    ui.pushButton->setMenu(pMenu);
}

 

初略效果圖如下:

image


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM