要在某一種窗體內添加右鍵菜單欄,比如在QTreeWidget中添加,
可以用到slot函數customContextMenuRequested(QPoint pos)。
如果是在Qt Creator中,則操作過程為:右擊QTreeWidget-->go to slot--
-->選擇customContextMenuRequested(QPoint pos)。
然後,在新建的customContextMenuRequested(QPoint pos)函數中便可以實現具體的菜單欄了。
為了判斷右鍵點擊的位置,即點即不同的item節點,會出現不同的右鍵菜單,我們可以用API中itemAt()函數實現。
而為了給每個節點賦予不同的鍵值,可以通過setData()來實現。
我在TreeWidget中添加右鍵菜單的實現代碼:
建立TreeWidget根節點的代碼實現:
QTreeWidgetItem *root;
root = new QTreeWidgetItem(ui->treeWidget, QStringList(QString("Connection")));
QVariant var0(0);
root->setData(0,Qt::UserRole,var0);
void MainWindow::on_treeWidget_customContextMenuRequested(QPoint pos)
{
QTreeWidgetItem* curItem=ui->treeWidget->itemAt(pos); //獲取當前被點擊的節點
if(curItem==NULL)return; //這種情況是右鍵的位置不在treeItem的范圍內,即在空白位置右擊
if(0==curItem->data(0,Qt::UserRole)) //data(...)返回的data已經在之前建立節點時用setdata()設置好
{
QMenu *popMenu =new QMenu(this);//定義一個右鍵彈出菜單
popMenu->addAction(ui->action_newDB);//往菜單內添加QAction 該action在前面用設計器定義了
popMenu->addAction(ui->action_openDB);
popMenu->addAction(ui->action_delDB);
popMenu->exec(QCursor::pos());//彈出右鍵菜單,菜單位置為光標位置
}
else
{
QMenu *popMenu =new QMenu(this);//定義一個右鍵彈出菜單
popMenu->addAction(ui->action_newTable);//往菜單內添加QAction 該action在前面用設計器定義了
popMenu->addAction(ui->action_openTable);
popMenu->addAction(ui->action_designTable);
popMenu->exec(QCursor::pos());//彈出右鍵菜單,菜單位置為光標位置
}
}
注意:
還要在MainWindow的構造函數中加入:
ui->treeWidget->setContextMenuPolicy(Qt::CustomContextMenu);
否則不會出現右鍵!!
laokaddk 的BLOG