在Qt+VS2005下,使用slot函數customContextMenuRequested(QPointpos)實現Treewidget的右鍵菜單欄。
1、在ui編輯界面中,右擊QTreeWidget--> Connect Signal-->選擇customContextMenuRequested(QPoint),添加slot函數。
在屬性設置中,將contextMenuPolicy屬性要設置為:CustomContextMenu,這步不能忘記,否則右鍵無反應。
2、為Treewidget添加節點,通過setData()來為每個節點賦予不同的鍵值。
1 QTreeWidgetItem *root; 2 root = new QTreeWidgetItem(ui->treeWidget, QStringList(QString("Connection"))); 3 QVariant var0(0); 4 root->setData(0,Qt::UserRole,var0);
3、在slot函數中使用itemAt()函數獲取當前被點擊的節點,然后為不同的節點添加不同的菜單。
1 void MainWindow::on_treeWidget_customContextMenuRequested(QPoint pos) 2 { 3 QTreeWidgetItem* curItem=ui->treeWidget->itemAt(pos); //獲取當前被點擊的節點
4 if(curItem==NULL)return; //這種情況是右鍵的位置不在treeItem的范圍內,即在空白位置右擊
5 QVariant var = curItem->data(0,Qt::UserRole); 6 if(0 == var) //data(...)返回的data已經在之前建立節點時用setdata()設置好
7 { 8 QMenu *popMenu =new QMenu(this);//定義一個右鍵彈出菜單
9
10 popMenu->addAction(ui->action_newDB);//往菜單內添加QAction 該action在前面用設計器定義了
11 popMenu->addAction(ui->action_openDB); 12 popMenu->addAction(ui->action_delDB); 13 popMenu->exec(QCursor::pos());//彈出右鍵菜單,菜單位置為光標位置
14 } 15 else
16 { 17 QMenu *popMenu =new QMenu(this);//定義一個右鍵彈出菜單
18
19 popMenu->addAction(ui->action_newTable);//往菜單內添加QAction 該action在前面用設計器定義了
20 popMenu->addAction(ui->action_openTable); 21 popMenu->addAction(ui->action_designTable); 22 popMenu->exec(QCursor::pos());//彈出右鍵菜單,菜單位置為光標位置
23 } 24 }