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 ...
随机推荐
- iOS CGAffineTransform你了解多少?
CGAffineTransform介绍 概述 CGAffineTransform是一个用于处理形变的类,其可以改变控件的平移.缩放.旋转等,其坐标系统采用的是二维坐标系,即向右为x轴正方向,向下为y轴 ...
- ASP-DateAdd时间增加
ASP内置函数DateAdd(interval, number, date) 1.interval标识你要加的日期部分,具体参数如下:yyyy → 年m → 月d → 日h → 小时n → 分钟s → ...
- 常用的数据库sql语句
create table query_audit_log(Time varchar(255) default null,Id int(10) default null, Command varchar ...
- 如何使用模板生成 sqlite3 sql 创建语句?
template<typename T,typename... Args> std::string createTable(T tableName,Args&&... ar ...
- python面试题(八)
1 Python中如何使用线程池和进程池? 需要注意一下 不能无限的开进程,不能无限的开线程 最常用的就是开进程池,开线程池.其中回调函数非常重要 回调函数其实可以作为一种编程思想,谁好了谁就去掉 只 ...
- web测试策略
一.输入框 二.搜索功能 三.添加功能 四.修改功能 五.删除功能 六.注册.登陆模块 七.上传图片测试 八:文件导出 九.文件下载页面 十.查询结果列表 十一.cookie 一.输入框 1 字 ...
- App的开发过程
不同的项目管理模式或许会有完全不同的流程步骤.但是专业性几乎是保证产品质量的唯一准则. App的开发过程主要分为以下阶段,本文会按顺序为大家简单地说明: 1.需求梳理.分析 2.产品原型图绘制 3.U ...
- Java - 在控制台中执行一个可执行jar
1.Maven打包一个可执行jar: <build> <plugins> <plugin> <groupId>org.apache.maven.plug ...
- python之数据的序列化
参考博客:http://www.cnblogs.com/yyds/p/6563608.html 数据的序列化功能表 json.dumps() 将python数据类型转换为(json)字符串 json. ...
- 在运行myeclipse10注册机时,显示找不到com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel这个包
在win7下安装MyEclipse10.安装完成之后运行注册机,总是提示classnotfond显示找不到com.sun.java.swing.plaf.nimbus.NimbusLookAndFee ...