Qt之右鍵選單
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()));