在Qt+VS2005下,使用slot函數customContextMenuRequested(QPointpos)實現Treewidget的右鍵菜單欄。
1、在ui編輯界面中,右擊QTreeWidget--> Connect Signal-->選擇customContextMenuRequested(QPoint),添加slot函數。
在屬性設置中,將contextMenuPolicy屬性要設置為:CustomContextMenu,這步不能忘記,否則右鍵無反應。
2、為Treewidget添加節點,通過setData()來為每個節點賦予不同的鍵值。
QTreeWidgetItem *root; root = new QTreeWidgetItem(ui->treeWidget, QStringList(QString("Connection"))); QVariant var0(0); root->setData(0,Qt::UserRole,var0);
3、在slot函數中使用itemAt()函數獲取當前被點擊的節點,然后為不同的節點添加不同的菜單。
void MainWindow::on_treeWidget_customContextMenuRequested(QPoint pos) { QTreeWidgetItem* curItem=ui->treeWidget->itemAt(pos); //獲取當前被點擊的節點 if(curItem==NULL)return; //這種情況是右鍵的位置不在treeItem的范圍內,即在空白位置右擊 QVariant var = curItem->data(0,Qt::UserRole); if(0 == var) //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());//彈出右鍵菜單,菜單位置為光標位置 } }
參考:http://blog.csdn.net/moxiaomomo/article/details/6542683