网站首页 > 博客文章 正文
1. QTreeWidget删除整个TreeWidget
使用递归方式来删除节点下的子节点。分析:如果当前节点没有子节点那么就直接删除,如果有子节点就进入子节点继续删除(这里采用递归形式)直到最低层的节点(没有子节点)返回。然后逐一一层一层的返回实现递归删除。
说明:这里利用了第一个节点删除后下一个节点自动的会成为第一个节点特性。循环删除第一个节点从而实现删除所有节点的目的。
//递归删除节点
void MainWindow::removeItem(QTreeWidgetItem *item)
{
int count = item->childCount();
if(count == 0)//没有子节点,直接删除
{
delete item;
return;
}
for(int i=0; i<count; i++)
{
QTreeWidgetItem *childItem = item->child(0);//删除子节点
removeItem(childItem);
}
delete item;//最后将自己删除
}
/**
* @brief MainWindow::removeAll_treeWidgetItemv
* 功能:删除QTreeWidget中所有节点
*/
void MainWindow::removeAll_treeWidgetItemv(void)
{
//通过删除根节点及其子节点来达到删除整个TreeWidget的目的
QTreeWidgetItem *item;
item = ui->josn_treeWidget->topLevelItem(0);
while(item)
{
removeItem(item);
item = ui->josn_treeWidget->topLevelItem(0);
}
}
2. QTreeWidget遍历当前节点的所有子节点
说明:这里使用了QTreeWidget迭代器遍历整个TreeWidget控件,然后再判断具有相同父节点的节点。如果节点的父节点(一直往上找,可能是父节点的父节点)相同表示是同一个父节点下的子节点(不一定是同一级的节点)。
/**
* 功能:查找当前节点下所有子节点
* 返回值:返回
**/
int myjosn_string::FindALL_childrenNode(QTreeWidgetItem *item)
{
if(item->childCount() == 0) //说明:当Item下没有子节点时会导致程序崩溃
{
return 0;
}
//使用QTreeWidgetItem迭代器从当前节点遍历整个QTreeWidget树
//判断条件:判断每个QTreeWidgetItem的parent是不是当前节点,如果是表示当前遍历的节点为此节点的子节点
//否则就不是则停止遍历。此处已经是当前节点的最后一个子节点了
QTreeWidgetItemIterator ite_item(item); //迭代器的参数应该为全局变量才行
int all_children_count = 0;
//节点没有父节点时,返回NULL
QTreeWidgetItem *temp_item;
ite_item++;
temp_item = (*ite_item)->parent();
qDebug() << "当前节点" << item->childCount();
if(item->childCount() != 0)
{
while((*ite_item))
{
while(temp_item) //筛选具有相同父节点的节点
{
if(temp_item != item)
{
return (all_children_count); //找到了当前节点的结束位置
}
else
{
break; //属于当前节点的子节点
}
temp_item = temp_item->parent();
}
all_children_count++;
ite_item++;
}
}
qDebug() << "所有的子节点:" << all_children_count - 1;
return (all_children_count - 1); //返回获取到的子节点数量,去除"当前节点本身"
}
猜你喜欢
- 2025-06-09 详解RTP协议之H264封包和解包实战
- 2025-06-09 Qt开发经验小技巧146-150(qt开发项目)
- 2025-06-09 Qt Concurrent的使用(qt线程使用)
- 2025-06-09 Qt编写全能播放组件(支持ffmpeg2/3/4/5/6/Qt4/5/6)
- 2025-06-09 「Qt入门第24篇」 数据库(四)SQL查询模型QSqlQueryModel
- 2025-06-09 C++解析头文件-Qt自动生成信号声明
- 2025-06-09 这个C++ Qt 文件传输方案性能飙升300%,GitHub冲上热榜
- 2025-06-09 Qt之QTableview显示及单元格内容获取
- 2025-06-09 Qt编程进阶(25):Qt对Excel的基本读写操作
- 2025-06-09 Qt:QFile类(qt中的类是什么)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)