转自: http://blog.youkuaiyun.com/liukang325/article/details/22734735
实现代码如下:
- //头文件中申明;
- QMenu *m_grpMenu;
- QMenu *m_memberMenu;
- QMenu *m_addAreaMenu;
- QAction *m_grpAddOneMember;
- QAction *m_grpDeleteGrp;
- QAction *m_grpAddOneGrp;
- QAction *m_memberDelete;
- QAction *m_memberMove;
- QAction *m_memberSyncTime;
- QAction *m_addAreaAction;
- QAction *m_grpFlush;
- QAction *m_addDev;
- void createItemMenu();
- void createConnection();
- //构造函数调用:
- createItemMenu();
- createConnection();
- void frmMain::createItemMenu()
- {
- m_grpMenu = new QMenu(this);
- m_memberMenu = new QMenu(this);
- m_addAreaMenu = new QMenu(this);
- connect(m_grpMenu,SIGNAL(triggered(QAction *)),
- this,SLOT(onGrpMenuTriggered(QAction *)));
- connect(m_memberMenu,SIGNAL(triggered(QAction *)),
- this,SLOT(onMemberMenuTriggered(QAction *)));
- connect(m_addAreaMenu,SIGNAL(triggered(QAction *)),
- this,SLOT(onAddAreaMenuTriggered(QAction *)));
- m_grpAddOneMember = new QAction(tr("增加子区域"),this);
- m_grpAddOneMember->setIcon(QIcon(":/image/add.png"));;
- m_grpDeleteGrp = new QAction(tr("删除区域"),this);
- m_grpDeleteGrp->setIcon(QIcon(":/image/delete.png"));;
- m_grpAddOneGrp = new QAction(tr("增加设备"),this);
- m_grpAddOneGrp->setIcon(QIcon(":/image/add.png"));;
- m_memberDelete = new QAction(tr("删除设备"),this);
- m_memberDelete->setIcon(QIcon(":/image/delete.png"));;
- m_memberMove = new QAction(tr("移动设备"),this);
- m_memberMove->setIcon(QIcon(":/image/next.png"));;
- m_memberSyncTime = new QAction(tr("同步时间"),this);
- m_memberSyncTime->setIcon(QIcon(":/image/move.png"));;
- m_addAreaAction = new QAction(tr("增加区域"),this);
- m_addAreaAction->setIcon(QIcon(":/image/add.png"));;
- m_addDev = new QAction(tr("增加设备"),this);
- m_addDev->setIcon(QIcon(":/image/add.png"));
- m_grpFlush = new QAction(tr("刷新列表"),this);
- m_grpFlush->setIcon(QIcon(":/image/update.png"));;
- }
- void frmMain::createConnection()
- {
- connect(ui->treeView,SIGNAL(customContextMenuRequested(const QPoint&)),
- this,SLOT(onCustomContextMenuRequested(const QPoint&)));
- }
- void frmMain::onCustomContextMenuRequested(const QPoint &pos)
- {
- QModelIndex idx = ui->treeView->indexAt(pos);
- QPoint tmpPos;
- tmpPos.setX(pos.x());
- tmpPos.setY(pos.y() + 25);
- QString tmpFilePath = model->filePath(idx);
- // if (!idx.isValid())
- if(tmpFilePath.count() == 0)
- {
- currentFilePath.clear();
- currentFilePath.append("./");
- if (m_addAreaMenu->isEmpty())
- {
- //增加区域
- m_addAreaMenu->addAction(m_addAreaAction);
- m_addAreaMenu->addAction(m_addDev);
- m_addAreaMenu->addAction(m_grpFlush);
- }
- m_addAreaMenu->popup(ui->treeView->mapToGlobal(tmpPos));
- }
- else if(QString(tmpFilePath.at(tmpFilePath.count()-1)) == "】")
- {
- if (m_grpMenu->isEmpty())
- {
- //增加子区域
- m_grpMenu->addAction(m_grpAddOneMember);
- //删除区域
- m_grpMenu->addAction(m_grpDeleteGrp);
- m_grpMenu->addAction(m_grpAddOneGrp);
- }
- m_grpMenu->popup(ui->treeView->mapToGlobal(tmpPos));
- }
- else
- {
- if (m_memberMenu->isEmpty())
- {
- //删除设备
- m_memberMenu->addAction(m_memberDelete);
- //移动设备
- m_memberMenu->addAction(m_memberMove);
- //同步时间
- m_memberMenu->addAction(m_memberSyncTime);
- }
- m_memberMenu->popup(ui->treeView->mapToGlobal(tmpPos));
- }
- }
- void frmMain::onGrpMenuTriggered(QAction *action)
- {
- if (action == m_grpAddOneMember)
- {//增加子区域
- }
- else if (action == m_grpDeleteGrp)
- {//删除区域
- }
- else if(action == m_grpAddOneGrp)
- {
- //在区域下增加设备
- }
- }
- void frmMain::onMemberMenuTriggered(QAction *action)
- {
- if (action == m_memberDelete)
- {//删除设备
- }
- else if(action == m_memberMove)
- {//移动设备
- }
- else if(action == m_memberSyncTime)
- {//同步时间
- }
- }
- void frmMain::onAddAreaMenuTriggered(QAction *action)
- {
- if (action == m_addAreaAction)
- {//增加区域
- }
- if(action == m_addDev)
- {//增加设备
- }
- if(action == m_grpFlush)
- {//增加设备
- }
- }