QT5 QtreeWidget 实现点击item事件以及右键菜单删除item 和 重命名item
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的更多相关文章
- Extjs 4.2 panel 添加 click 事件及右键菜单
listeners: { render: function(c) { c.body.on('click', function() { //TODO 添加点击事件功能 }); c.body.on('co ...
- HTML5事件-自定义右键菜单
WEB领域中,为实现上下文菜单,开发人员面临的主要问题是如何确定应该显示这个上下文菜单(Windows 中,右键单击:Mac 中,Ctrl+单击), 以及如何屏蔽与该操作相关联的默认上下文菜单. 解决 ...
- c#控制IE浏览器自动点击等事件WebBrowser,mshtml.IHTMLDocument2 .
// c#控制IE浏览器自动点击等事件WebBrowser,mshtml.IHTMLDocument2 分类: c# 2013-02-06 15:18 3008人阅读 评论(0) 收藏 举报 可以实现 ...
- 昨天所写的JQ 点击隐藏事件,关键性原理
JQ 点击隐藏事件,关键性原理 1.JQ 库的调用 一般选择为: 1)库越小越好 2)库的功能越强大越好 <script src="js/jquery.js" type=&q ...
- 深入A标签点击触发事件而不跳转的详解
本文介绍下,当点击A标签时,触发事件但不跳转的实现方法,有需要的朋友参考下吧. 点击页面上的空链接,点击后页面自动刷新,并会定位到页面顶端. 不过,有时需要点击#页面但不作跳转,可以这样写: < ...
- v-charts修改点击图例事件,legendselectchanged
html: <!--折线图--><ve-line :extend="item.chartExtend" :data-zoom="dataZoom&quo ...
- Vue 框架-02-事件:点击, 双击事件,鼠标移上事件
Vue 框架-02-事件:点击, 双击事件,鼠标移上事件 1.单击事件:v-on:click 源码 app2.js : //实例化 vue 对象 new Vue({ //注意代码格式 //el:ele ...
- js去掉浏览器右键点击默认事件(+vue项目开启右键行为)
js去掉浏览器右键点击默认事件 1.阻止整个页面所有的右击事件 document.oncontextmenu = function(){ return false;} 2.特定的区域/元素 docum ...
- jq自定义下拉菜单,在点击非当前下拉菜单区域时,关闭下拉菜单(点击事件的对象不是目标元素本身)
jq自定义下拉菜单,在点击非当前下拉菜单区域时,关闭下拉菜单(点击事件的对象不是目标元素本身) //点击非当前下拉菜单区域时,关闭下拉菜单 $(document).mousedown(function ...
随机推荐
- Error: unable to connect to node rabbit@10: nodedown 修改hostname后异常
https://blog.csdn.net/witsmakemen/article/details/22651365 [root@d bin]# rabbitmqctl start_appStarti ...
- RabbitMQ_消息队列基本使用_2
简介 RabbitMQ:接受消息再传递消息,可以视为一个“邮局”. 发送者和接受者通过队列来进行交互,队列的大小可以视为无限的,多个发送者可以发生给一个队列,多个接收者也可以从一个队列中接受消息. p ...
- mysql数据库中表记录的玩法
一.增加表记录(相当于插入表记录) 1. 插入完整数据(顺序插入) 语法一: INSERT INTO 表名(字段1,字段2,字段3…字段n) VALUES(值1,值2,值3…值n); 语法二: INS ...
- MySQL数据库(9)_MySQL数据库常用操作命令
注:刚安装好的MySql包含一个含空密码的root帐户和一个匿名帐户,这是很大的安全隐患,对于一些重要的应用我们应将安全性尽可能提高,在这里应把匿名帐户删除. root帐户设置密码,可用如下命令进行: ...
- VMware虚拟机NAT模式的具体配置
NAT模式的具体配置 NAT方式:虚拟机可以上外网,可以访问宿主计算机所在网络的其他计算机(反之不行). 1.1.1. 查看虚拟机的网络参数 1) 打开虚拟机,选择菜单&q ...
- 最小化CentOS6.7(64bit)---安装mysql5.5、jdk、tomcat
********mysql******** ------------------------------------------------------------------------------ ...
- api响应类
接口开发响应类封装 class response{ /* * 封通信接口数据 * @param integer $code 状态码 * @param string $message 状态信息 * @p ...
- 如何安装/更新ruby,安装cocoapods,为开发做好准备!(2016年12月07日更新内容)
一:首先来说一下如何安装/更新ruby: 一般情况下,即使是新买的Mac电脑也会安装有ruby,可以在终端中键入一下命令查看ruby版本 ruby -v 正常情况下下面会打印出ruby的版本信息,如果 ...
- VC:res协议——从模块中获取资源
你可以从模块中获取一个资源.通过在文件名之前加上res://,你就可以引用一个嵌入在动态链接库资源文件中的HTML页面.
- Python编程-模块和包
一.模块 1.什么是模块? 一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀. 2.为何要使用模块? 如果你退出python解释器然后重新进入,那么你之前定义的函 ...