(四)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幫助文檔中有相應介紹:

image

a、Qt::DefaultContextMenu

默認是Qt::DefaultContextMenu,它是利用右鍵菜單事件contextMenuEvent()來處理(which means the contextMenuEvent() handler is called)。就是要重寫contextMenuEvent( QContextMenuEvent * event )函數。

你可以通過UI屬性來設置:

image

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控件,設置如下:

image

   //添加右鍵菜
    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()));


免責聲明!

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



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