1、new 一个QTreeWidget 对象,并设置头标签,和根节点(个人程序需要)

   QTreeWidget* treeWidget = ui.treeWidget;//我已经在ui设计师中拖了一个QTreeWidget

    QString headers;
headers = "Name" ;
treeWidget->setHeaderLabel(headers); QStringList rootText;
rootText << "wells";
root = new QTreeWidgetItem(treeWidget, rootText);

2、添加 QTreeWidgetItem(这里是读取文件夹里文件的名字作为item的名字)

    for(int i = ;i < fileList.size();i++)
{ QTreeWidgetItem *leaf = new QTreeWidgetItem(root, QStringList() <<fileList.at(i).fileName());
leaf->setFlags(leaf->flags() | Qt::ItemIsEditable);
root->addChild(leaf);
}

3、点击item事件

 

connect(treeWidget,SIGNAL(itemClicked(QTreeWidgetItem*,int)), this,SLOT(checkself(QTreeWidgetItem* ,int)));//检测点击事件,信号槽机制

4、checkself(QTreeWidgetItem* ,int);函数是点击后的响应函数。在private slot:  下声明(这里的具体实现就不贴了)

5、右键弹出菜单

connect(treeWidget,SIGNAL(customContextMenuRequested(const QPoint&)), this,SLOT(popMenu(const QPoint&)));//检测鼠标右键

6、弹出菜单的响应函数  popMenu(const QPoint&)

void LWD::popMenu(const QPoint&)
{
QTreeWidgetItem* curItem=treeWidget->currentItem(); //获取当前被点击的节点
if(curItem==NULL)return; //这种情况是右键的位置不在treeItem的范围内,即在空白位置右击
QString wellName = curItem->text();
if(wellName != "wells")
{
QAction deleteWell(QString::fromLocal8Bit("&删除该井"),this);//删除井
QAction reNameWell(QString ::fromLocal8Bit("&重命名井"),this);//重命名井
//在界面上删除该item
connect(&deleteWell, SIGNAL(triggered()), this, SLOT(deleteItem()));
connect(&reNameWell,SIGNAL(triggered()),this,SLOT(renameWell())); QPoint pos;
QMenu menu(ui.treeWidget);
menu.addAction(&deleteWell);
menu.addAction(&reNameWell);
menu.exec(QCursor::pos()); //在当前鼠标位置显示 }
}

7、deleteItem()

void LWD::deleteItem()
{
root->removeChild(treeWidget->currentItem());
if(myW != NULL)
{
myW->setParent(NULL);
ui.verticalLayout_4->removeWidget(myW);
}
//删除井数据文件
QString dirPath = "../Data1/";
dirPath.append(treeWidget->currentItem()->text());
dirPath.append("/");
DeleteDirectory(dirPath);//实现在下面 }
bool LWD::DeleteDirectory(const QString &path)
{
if (path.isEmpty())
return false; QDir dir(path);
if(!dir.exists())
return true; dir.setFilter(QDir::AllEntries | QDir::NoDotAndDotDot);
QFileInfoList fileList = dir.entryInfoList();
foreach (QFileInfo fi, fileList)
{
if (fi.isFile())
fi.dir().remove(fi.fileName());
else
DeleteDirectory(fi.absoluteFilePath());
} return dir.rmpath(dir.absolutePath());
}

8、renameWell()

void LWD::renameWell()
{
preName = treeWidget->currentItem()->text();
prePath = "../Data1/";
prePath.append(preName);
ui.treeWidget->editItem(ui.treeWidget->currentItem());
//t通过监控itemChanged事件来确定修改后的名字!!!!
connect(treeWidget,SIGNAL(itemChanged( QTreeWidgetItem *,int )),this,SLOT(nameChanged(QTreeWidgetItem* ))); } void LWD::nameChanged(QTreeWidgetItem* item)
{
//先重命名文件夹
QString newName = treeWidget->currentItem()->text();
QString newPath = "../Data1/";
newPath.append(newName);
QFile::rename(prePath,newPath);
prePath = newPath.append("/");
prePath.append(preName);
prePath.append(".txt");
//重命名井眼轨迹处理后的文件
newPath.append("/");
newPath.append(newName);
newPath.append(".txt");
QFile::rename(prePath,newPath); }

QT5 QtreeWidget 实现点击item事件以及右键菜单删除item 和 重命名item的更多相关文章

  1. Extjs 4.2 panel 添加 click 事件及右键菜单

    listeners: { render: function(c) { c.body.on('click', function() { //TODO 添加点击事件功能 }); c.body.on('co ...

  2. HTML5事件-自定义右键菜单

    WEB领域中,为实现上下文菜单,开发人员面临的主要问题是如何确定应该显示这个上下文菜单(Windows 中,右键单击:Mac 中,Ctrl+单击), 以及如何屏蔽与该操作相关联的默认上下文菜单. 解决 ...

  3. c#控制IE浏览器自动点击等事件WebBrowser,mshtml.IHTMLDocument2 .

    // c#控制IE浏览器自动点击等事件WebBrowser,mshtml.IHTMLDocument2 分类: c# 2013-02-06 15:18 3008人阅读 评论(0) 收藏 举报 可以实现 ...

  4. 昨天所写的JQ 点击隐藏事件,关键性原理

    JQ 点击隐藏事件,关键性原理 1.JQ 库的调用 一般选择为: 1)库越小越好 2)库的功能越强大越好 <script src="js/jquery.js" type=&q ...

  5. 深入A标签点击触发事件而不跳转的详解

    本文介绍下,当点击A标签时,触发事件但不跳转的实现方法,有需要的朋友参考下吧. 点击页面上的空链接,点击后页面自动刷新,并会定位到页面顶端. 不过,有时需要点击#页面但不作跳转,可以这样写: < ...

  6. v-charts修改点击图例事件,legendselectchanged

    html: <!--折线图--><ve-line :extend="item.chartExtend" :data-zoom="dataZoom&quo ...

  7. Vue 框架-02-事件:点击, 双击事件,鼠标移上事件

    Vue 框架-02-事件:点击, 双击事件,鼠标移上事件 1.单击事件:v-on:click 源码 app2.js : //实例化 vue 对象 new Vue({ //注意代码格式 //el:ele ...

  8. js去掉浏览器右键点击默认事件(+vue项目开启右键行为)

    js去掉浏览器右键点击默认事件 1.阻止整个页面所有的右击事件 document.oncontextmenu = function(){ return false;} 2.特定的区域/元素 docum ...

  9. jq自定义下拉菜单,在点击非当前下拉菜单区域时,关闭下拉菜单(点击事件的对象不是目标元素本身)

    jq自定义下拉菜单,在点击非当前下拉菜单区域时,关闭下拉菜单(点击事件的对象不是目标元素本身) //点击非当前下拉菜单区域时,关闭下拉菜单 $(document).mousedown(function ...

随机推荐

  1. Java基础 - 获取随机数

    使用方法 package com.demo5; import java.util.Random; /* * 使用步骤: * A:导包 * import java.util.Random; * B:创建 ...

  2. Linux下查看CPU型号,内存大小,硬盘空间命令

    1 查看CPU 1.1 查看CPU个数 # cat /proc/cpuinfo | grep "physical id" | uniq | wc -l 2 **uniq命令:删除重 ...

  3. Python3 不能直接导入reduce

    python 3.0以后, reduce已经不在built-in function里了, 要用它就得from functools import reduce. reduce的用法 reduce(fun ...

  4. centos7 Mysql5.6 升级Mysql5.7

    1 2. 卸载Mysql5.6 ,一共有三个包 要卸载: (1)先卸载mysql-server包 : 执行命令  yum remove mysql mysql-server (2)再卸载mysql-c ...

  5. Longest Common Prefix -最长公共前缀

    问题:链接 Write a function to find the longest common prefix string amongst an array of strings. 解答: 注意 ...

  6. 20170405-STO库存转储单

    1.工厂间转储: (1)MB1B 移动类型 301 工厂到工厂(一步)转账,->简单明了一步转储过账后会产生 GR,MITA增加了,MIZH减少了,MB03, **会产生 GR,如果俩工厂 标准 ...

  7. ABAP发邮件函数

    步骤: 一.检查输入参数, (1)未指定文件類別代碼,(2)未指定郵件主題, (3)未指定郵件內容, (4)未指定發送人郵件地址, (5)未指定接收人郵件地址, 二.调用发送功能, (1)创建发送请求 ...

  8. 深入理解MVC架构

    MVC MVC是一种设计模式(Design pattern),也就是一种解决问题的方法和思路, 是上世纪80年代提出的,到现在已经颇有历史了. MVC的意义在于指导开发者将数据与表现解耦,提高代码,特 ...

  9. 剑指offer 面试3题

    面试3题: 题:数组中重复的数字 题目:在一个长度为n的数组里的所有数字都在0到n-1的范围内. 数组中某些数字是重复的,但不知道有几个数字是重复的.也不知道每个数字重复几次.请找出数组中任意一个重复 ...

  10. Socke---转

      Socket,又称为套接字,Socket是计算机网络通信的基本的技术之一.如今大多数基于网络的软件,如浏览器,即时通讯工具甚至是P2P下载都是基于Socket实现的.本文会介绍一下基于TCP/IP ...