[转] QT 在TreeView中增加右键菜单功能

来源:互联网 发布:labview 二维数组拆分 编辑:程序博客网 时间:2024/05/18 04:59

转自: http://blog.csdn.net/liukang325/article/details/22734735


实现代码如下:

[cpp] view plaincopy在CODE上查看代码片派生到我的代码片
  1. //头文件中申明;  
  2.     QMenu *m_grpMenu;  
  3.     QMenu *m_memberMenu;  
  4.     QMenu *m_addAreaMenu;  
  5.   
  6.     QAction *m_grpAddOneMember;  
  7.     QAction *m_grpDeleteGrp;  
  8.     QAction *m_grpAddOneGrp;  
  9.   
  10.     QAction *m_memberDelete;  
  11.     QAction *m_memberMove;  
  12.     QAction *m_memberSyncTime;  
  13.       
  14.     QAction *m_addAreaAction;  
  15.     QAction *m_grpFlush;  
  16.     QAction *m_addDev;  
  17.   
  18.     void createItemMenu();  
  19.     void createConnection();  
  20.   
  21.   
  22. //构造函数调用:  
  23. createItemMenu();  
  24. createConnection();  


[cpp] view plaincopy在CODE上查看代码片派生到我的代码片
  1. void frmMain::createItemMenu()  
  2. {  
  3.     m_grpMenu = new QMenu(this);  
  4.     m_memberMenu = new QMenu(this);  
  5.     m_addAreaMenu = new QMenu(this);  
  6.     connect(m_grpMenu,SIGNAL(triggered(QAction *)),  
  7.             this,SLOT(onGrpMenuTriggered(QAction *)));  
  8.     connect(m_memberMenu,SIGNAL(triggered(QAction *)),  
  9.             this,SLOT(onMemberMenuTriggered(QAction *)));  
  10.     connect(m_addAreaMenu,SIGNAL(triggered(QAction *)),  
  11.             this,SLOT(onAddAreaMenuTriggered(QAction *)));  
  12.   
  13.     m_grpAddOneMember = new QAction(tr("增加子区域"),this);  
  14.     m_grpAddOneMember->setIcon(QIcon(":/image/add.png"));;  
  15.     m_grpDeleteGrp = new QAction(tr("删除区域"),this);  
  16.     m_grpDeleteGrp->setIcon(QIcon(":/image/delete.png"));;  
  17.     m_grpAddOneGrp = new QAction(tr("增加设备"),this);  
  18.     m_grpAddOneGrp->setIcon(QIcon(":/image/add.png"));;  
  19.   
  20.     m_memberDelete = new QAction(tr("删除设备"),this);  
  21.     m_memberDelete->setIcon(QIcon(":/image/delete.png"));;  
  22.     m_memberMove = new QAction(tr("移动设备"),this);  
  23.     m_memberMove->setIcon(QIcon(":/image/next.png"));;  
  24.     m_memberSyncTime = new QAction(tr("同步时间"),this);  
  25.     m_memberSyncTime->setIcon(QIcon(":/image/move.png"));;  
  26.   
  27.     m_addAreaAction = new QAction(tr("增加区域"),this);  
  28.     m_addAreaAction->setIcon(QIcon(":/image/add.png"));;  
  29.     m_addDev = new QAction(tr("增加设备"),this);  
  30.     m_addDev->setIcon(QIcon(":/image/add.png"));  
  31.     m_grpFlush = new QAction(tr("刷新列表"),this);  
  32.     m_grpFlush->setIcon(QIcon(":/image/update.png"));;  
  33. }  
  34.   
  35. void frmMain::createConnection()  
  36. {  
  37.     connect(ui->treeView,SIGNAL(customContextMenuRequested(const QPoint&)),  
  38.             this,SLOT(onCustomContextMenuRequested(const QPoint&)));  
  39. }  
  40.   
  41. void frmMain::onCustomContextMenuRequested(const QPoint &pos)  
  42. {  
  43.     QModelIndex idx = ui->treeView->indexAt(pos);  
  44.     QPoint tmpPos;  
  45.     tmpPos.setX(pos.x());  
  46.     tmpPos.setY(pos.y() + 25);  
  47.     QString tmpFilePath = model->filePath(idx);  
  48. //    if (!idx.isValid())  
  49.     if(tmpFilePath.count() == 0)  
  50.     {  
  51.         currentFilePath.clear();  
  52.         currentFilePath.append("./");  
  53.         if (m_addAreaMenu->isEmpty())  
  54.         {  
  55.             //增加区域  
  56.             m_addAreaMenu->addAction(m_addAreaAction);  
  57.             m_addAreaMenu->addAction(m_addDev);  
  58.             m_addAreaMenu->addAction(m_grpFlush);  
  59.         }  
  60.         m_addAreaMenu->popup(ui->treeView->mapToGlobal(tmpPos));  
  61.   
  62.     }  
  63.     else if(QString(tmpFilePath.at(tmpFilePath.count()-1)) == "】")  
  64.     {  
  65.         if (m_grpMenu->isEmpty())  
  66.         {  
  67.             //增加子区域  
  68.             m_grpMenu->addAction(m_grpAddOneMember);  
  69.             //删除区域  
  70.             m_grpMenu->addAction(m_grpDeleteGrp);  
  71.             m_grpMenu->addAction(m_grpAddOneGrp);  
  72.         }  
  73.         m_grpMenu->popup(ui->treeView->mapToGlobal(tmpPos));  
  74.     }  
  75.     else  
  76.     {  
  77.         if (m_memberMenu->isEmpty())  
  78.         {  
  79.             //删除设备  
  80.             m_memberMenu->addAction(m_memberDelete);  
  81.             //移动设备  
  82.             m_memberMenu->addAction(m_memberMove);  
  83.             //同步时间  
  84.             m_memberMenu->addAction(m_memberSyncTime);  
  85.         }  
  86.         m_memberMenu->popup(ui->treeView->mapToGlobal(tmpPos));  
  87.     }  
  88. }  
  89.   
  90. void frmMain::onGrpMenuTriggered(QAction *action)  
  91. {  
  92.     if (action == m_grpAddOneMember)  
  93.     {//增加子区域  
  94.   
  95.     }  
  96.     else if (action == m_grpDeleteGrp)  
  97.     {//删除区域  
  98.   
  99.     }  
  100.     else if(action == m_grpAddOneGrp)  
  101.     {  
  102.         //在区域下增加设备  
  103.   
  104.     }  
  105. }  
  106.   
  107. void frmMain::onMemberMenuTriggered(QAction *action)  
  108. {  
  109.     if (action == m_memberDelete)  
  110.     {//删除设备  
  111.   
  112.     }  
  113.     else if(action == m_memberMove)  
  114.     {//移动设备  
  115.   
  116.     }  
  117.     else if(action == m_memberSyncTime)  
  118.     {//同步时间  
  119.   
  120.     }  
  121. }  
  122.   
  123. void frmMain::onAddAreaMenuTriggered(QAction *action)  
  124. {  
  125.     if (action == m_addAreaAction)  
  126.     {//增加区域  
  127.   
  128.     }  
  129.     if(action == m_addDev)  
  130.     {//增加设备  
  131.   
  132.     }  
  133.     if(action == m_grpFlush)  
  134.     {//增加设备  
  135.   
  136.     }  


0 0
原创粉丝点击