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. JavaScript事件onblur与onfocus区别

    一.onblur 1.1 说明 onblur属性在元素失去焦点时触发,onblur常用于表单验证代码(例如用户离开表单字段). 1.2 示例 <input type="text&quo ...

  2. Hibernate 框架入门(一)

    1. SSH Web 层: Struts2 业务层: Spring 持久层: Hibernate 2. Hibernate 概述 概述 Hibernate 是一个对象关系映射框架(ORM 框架); 对 ...

  3. Ubuntu系统下完全卸载和安装Mysql

    删除 mysql sudo apt-get autoremove --purge mysql-server-5.0 sudo apt-get remove mysql-server sudo apt- ...

  4. Mac 安装Minikube

    环境信息: guoguo-MacBook-Pro-3:~ guoguo$ docker versionClient: Version:    17.12.0-ce API version:    1. ...

  5. app开发流程有哪些

    app开发流程是需求方和供求方相互协调的过程,一般分为需求分析.功能设计.功能实现.项目测试.上线等几个步骤,下面我们就来一起看看ytkah团队进行app开发各个流程主要做哪些事情,让您对app开发设 ...

  6. BGP Basic Knowledge

    声明: 这篇文章是对网上的这几篇博客的摘录,仅供我自己以后看的时候方便,且不需要再看太多的内容, 如果大家对BGP不是很了解,建议看原博客或者直接看RFC     BGP只支持基于目的地址的路由,即路 ...

  7. key points & (QA) about RPKI

    @1: Q: What does ROA look like?Since ROA means which ASes are allowed for originating routes to some ...

  8. Oracle查询结果列的加减、求和、连接、列值相乘

    select prod.amount,prod.plansum,(prod.plansum-prod.amount) as borrow,d.enum_value from ----结果集相减(sel ...

  9. cocos打包出现错误,执行命令出错,返回值:2。 Traceback (most recent call last): File "E:\cocos_workspace\MyGameOne\proj.android\build_native.py", line 43, in <module> build(opts.build_mode) File "E:\cocos_workspace\MyGa

    先看看NDK的版本,如果不行,就删除\proj.android\obj\local\armeabi下的文件.

  10. MACHINE_START-内核板级初始化实现机制(linux3.1.0)

    转:https://blog.csdn.net/charliewangg12/article/details/41518549 在驱动开发时,我们都是以一块开发板为基础移植驱动程序.每一块开发板对应一 ...