当前位置: 代码迷 >> QT开发 >> 关于QT的QTreeWidgetItem的右键有关问题
  详细解决方案

关于QT的QTreeWidgetItem的右键有关问题

热度:6820   发布时间:2013-02-26 00:00:00.0
关于QT的QTreeWidgetItem的右键问题!
我有个QTreeWidget构件,里面有多个QTreeWidgetItem,构成多级菜单,
举个简单例子,如下:
客户信息
   对私客户
      对私客户建立
   对公客户
      对公客户建立
其中,只有最后一级才是有真正交易界面的选项,其它都是目录,也就是说只有对私客户建立和对公客户建立
才有界面。我现在要求右键点击“目录”项,也就是客户信息、对私客户、 对公客户这三个选项时,出现的
是一个右键菜单,点击对私客户建立和对公客户建立出现的是另一个右键菜单。
这个也已经实现了,具体的作法是:
我将QTreeWidget的itemPressed(QTreeWidgetItem*,int)和自己的一个slot--PopMouseMenu连接起来,
然后在PopMouseMenu里面根据item->childCount()个数来判断,如果是大于0证明是“目录”,调用ShowDirMenu();如果是0,则表示是对私客户建立或对公客户建立,从而调用ShowFileMenu()。
ShowDirMenu()和ShowFileMenu()是自己写的函数,然后分别到这个里面,实现右键菜单项,

void EidtMenu::ShowDirMenu(QTreeWidgetItem *item)
{
        //创建Action
QAction AddTrade("&添加交易",this);
AddTrade.setIcon(QIcon("addtrade.png"));
connect(&AddTrade, SIGNAL(triggered()), this, SLOT(AddTrade_Dir()));

        QPoint pos;
        QMenu menu(ui.treeWidget);
        menu.addAction(&AddTrade);
        menu.exec(QCursor::pos());  //在当前鼠标位置显示
}

现在的问题就是如何在自定义的AddTrade_Dir()里面去知道我当前的QTreeWidgetItem啊?!

------解决方案--------------------------------------------------------
这个AddTrade_Dir()也是在这个类中,很简单的是 定义一个类成员函数QTreeWidgetItem *pItem;ShowDirMenu()中把item形参传给pItem,AddTrade_Dir()调用这个pItem;
------解决方案--------------------------------------------------------
QList<QTreeWidgetItem *> list = treewidget->selectedItems();
if(list.count())
{
    QTreeWidgetItem *item = list.first();
    tree单选,list里就一个item
}

引用:
我有个QTreeWidget构件,里面有多个QTreeWidgetItem,构成多级菜单,
举个简单例子,如下:
客户信息
   对私客户
      对私客户建立
   对公客户
      对公客户建立
其中,只有最后一级才是有真正交易界面的选项,其它都是目录,也就是说只有对私客户建立和对公客户建立
才有界面。我现在要求右键点击“目录”项,也就是客户信……