1、右鍵菜單創建和顯示
作為一種交互性強、使用方便的右鍵菜單在程序中是非常常用的,在Qt中可以輕松的實現。
QMenu menu;//添加菜單項,指定圖標、名稱、響應函數menu.addAction(QIcon("1.png"), QStringLiteral("添加"),this,SLOT(OnBscGroupRightAction()));//在鼠標位置顯示menu.exec(QCursor::pos());
2、右鍵菜單關聯控件
QWidget及其子類都可有右鍵菜單,首先設置QWidget與右鍵菜單有關的函數setContextMenuPolicy(),屬性對應項為contextmenuPolicy。
setContextMenuPolicy函數的參數為枚舉類型Qt::ContextMenuPolicy,qt幫助文檔中有相應介紹:
a、Qt::DefaultContextMenu
默認是Qt::DefaultContextMenu,它是利用右鍵菜單事件contextMenuEvent()來處理(which means the contextMenuEvent() handler is called)。就是要重寫contextMenuEvent( QContextMenuEvent * event )函數。
你可以通過UI屬性來設置:
void MainWindow::contextMenuEvent(QContextMenuEvent *event){QMenu Context;Context.addAction(ui->actionAdd);Context.exec(QCursor::pos());}
b、Qt::CustomContextMenu
它是發出QWidget::customContextMenuRequested信號,注意僅僅只是發信號,意味着要自己寫顯示右鍵菜單的slot。這個信號是QWidget唯一與右鍵菜單有關的信號(也是自有的唯一信號),同時也是很容易被忽略的signal:
void customContextMenuRequested ( const QPoint & pos )
一般來說為了方便,我們會省略自己添加connect來關聯槽函數,而是采用默認的槽函數,默認槽函數命名規則:void on_控件ID_customContextMenuRequested(const QPoint &pos);
void BscServer::on_treeView_customContextMenuRequested(const QPoint &pos){QModelIndex index=ui.treeView->currentIndex();QStandardItem *item = m_pMenuMgr->GetModel()->itemFromIndex(index);CMenuItemData *data = dynamic_cast<CMenuItemData*>(item);//根據右鍵類容顯示菜單ShowContextMenu(data);}
c、Qt::ActionsContextMenu
該類型比較簡單,直接使用QWidget::actions()函數添加動作即可,點擊右鍵就會自動彈出菜單。
如對於QTableView控件,設置如下:
//添加右鍵菜ui.tableView->addAction(ui.action_add);ui.tableView->addAction(ui.action_del);//右鍵處理事件connect(ui.action_add, SIGNAL(triggered()), this, SLOT(addRecord()));connect(ui.action_del, SIGNAL(triggered()), this, SLOT(delRecord()));



