• 9600阅读
  • 8回复

[提问]如何通过右键菜单实现对QTreeWidgetItem类型的节点重命名的功能? [复制链接]

上一主题 下一主题
离线郭亮
 
只看楼主 正序阅读 楼主  发表于: 2011-10-12
想通过右键菜单实现对QTreeWidgetItem类型的节点重命名的功能,菜单会写,相应的槽函数怎么实现?求各位大侠帮助?(connect(action2, SIGNAL(triggered()), this, SLOT(reName()));//重命名,rename函数怎么实现)
离线郭亮
只看该作者 8楼 发表于: 2011-10-13
回 5楼(remotesensor) 的帖子
接着这个问题,想判断重新命的名字和当前已存在的子节点没有重名。应该怎么做?
我的代码如下:
for(int i=0;i<root->childCount();i++)
    { while(1)
        {
         if(currentItem->text(0)==(root->child(i))->text(0))
          {
           QMessageBox::information(this, tr("提示"),tr("该容器名已经存在,请重新命名!"));
           this->editItem(currentItem, 0);
          }
         else  return;
  }但是没效果,怎么办?




离线郭亮
只看该作者 7楼 发表于: 2011-10-13
回 6楼(ifantasy) 的帖子
itemMenu = new QMenu;               //建右键菜单
QAction *action2 =new QAction(tr("重命名"),NULL);  //定义动作
itemMenu->addAction(action2);   //将动作加入菜单 26
离线ifantasy
只看该作者 6楼 发表于: 2011-10-13
回 楼主(郭亮) 的帖子
connect(action2, SIGNAL(triggered()), this, SLOT(reName()));这里的action2是怎么定义的?triggered是右击信号?请LZ解释下
离线remotesensor
只看该作者 5楼 发表于: 2011-10-13

离线郭亮
只看该作者 4楼 发表于: 2011-10-13
回 3楼(ppdayz) 的帖子
原来我在新建Item的时候没有设置。问题解决了,谢谢!
离线ppdayz

只看该作者 3楼 发表于: 2011-10-13
回 2楼(郭亮) 的帖子
你要看下。你的item的属性中是否有editable
QtreewidgetItem *  currentItem = root->currentItem(); //取得当前的item,因为是右击的,所以最好在右击的时候先判断下是否点在了有效区域,然后跳出菜单

if(currentItem->flags() & (Qt::ItemIsEditable))   //这个就是判断是否有ItemIsEditable这个flag,一般在新建item的时候设置下:itemNew->setFlag(itemNew->flags() | Qt::ItemIsEditable);

然后就
root->editItem(currentItem, 0);
离线郭亮
只看该作者 2楼 发表于: 2011-10-12
回 1楼(ppdayz) 的帖子
QTreeWidgetItem *itemNew=new QTreeWidgetItem(root);
QIcon folderIcon(style()->standardPixmap(QStyle::SP_DirClosedIcon));
itemNew->setText(0,name);
itemNew->setIcon(0,folderIcon);
root 是我之前建立的QTreeWidgetItem型的根节点,以上是我插入子节点的代码。对该节点点右键重命名。把你的代码稍事修改后,运行起来没效果。
能解释下您的代码吗?我是新手,正在学习QT。
离线ppdayz

只看该作者 1楼 发表于: 2011-10-12
回 楼主(郭亮) 的帖子
QtreewidgetItem *  currentItem = tree->currentItem();

if(currentItem->flags() & (Qt::ItemIsEditable)){
       tree->editItem(currentItem, 0);
}
快速回复
限100 字节
 
上一个 下一个