經常會看到一些菜單的部分項是由幾個按鈕組成的,如酷狗、QQ、360都有類似菜單,對於常規的菜單項,圖標 + 文字 實現一個事件,很容易完成,那麼怎麼自定義菜單項呢?
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);
}
初略效果圖如下:
Ubuntu 環境下Gtk與QT編譯環境安裝與配置 http://www.linuxidc.com/Linux/2013-08/88539.htm
Linux系統下QT環境搭建 http://www.linuxidc.com/Linux/2013-07/87576.htm
Ubuntu下QT控制台程序無法運行的解決方案以及XTerm的配置方法 http://www.linuxidc.com/Linux/2013-06/86244.htm
Ubuntu 10.04下QT4.7.4移植詳解 http://www.linuxidc.com/Linux/2013-01/77930.htm
Ubuntu 14.04下安裝部署Qt5開發環境 http://www.linuxidc.com/Linux/2014-05/101774.htm
Qt 的詳細介紹:請點這裡
Qt 的下載地址:請點這裡