Qt 中Treewidget添加右鍵菜單


在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

 


免責聲明!

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



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