当前位置: 首页 > news >正文

qt QTreeView的简单使用(多级子节点)

MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);setWindowTitle("QTreeView的简单使用");model = new QStandardItemModel;model->setHorizontalHeaderLabels(QStringList() << "left" << "right");ui->treeView->setModel(model);ui->treeView->header()->setSectionResizeMode(QHeaderView::Stretch);ui->treeView->header()->setDefaultAlignment(Qt::AlignHCenter);connect(ui->treeView, &QTreeView::clicked, this, &MainWindow::clicked);
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_pushButton_clicked()
{int index = model->rowCount();QList<QStandardItem *> topList;//链表容器添加顶级节点topList << new QStandardItem(QString("顶级节点:%1-left").arg(index + 1))<< new QStandardItem(QString("顶级节点:%1-right").arg(index + 1));topList[0]->setData(-1, Qt::UserRole + 1); //设置父节点行,当值为-1时则当前为顶级节点topList[1]->setData(-1, Qt::UserRole + 1);//添加顶级节点model->appendRow(topList);
}void MainWindow::on_pushButton_2_clicked()
{//获取当前行列QModelIndex curIndex = ui->treeView->currentIndex();int row = curIndex.row();int column = curIndex.column();int parentRow = curIndex.data(Qt::UserRole + 1).toInt();//当前行列值包含-1值或当前节点非顶级节点时返回if( -1 == row || -1 == column){return;}QStandardItem *item = model->itemFromIndex(curIndex);QList<QStandardItem *> childList;childList << new QStandardItem(QString("子节点:%1-left").arg(item->rowCount()))<< new QStandardItem(QString("子节点:%1-right").arg(item->rowCount()));//设置item的datachildList[0]->setData(row, Qt::UserRole + 1);childList[1]->setData(row, Qt::UserRole + 1);//添加子节点item->appendRow(childList);
}void MainWindow::on_pushButton_3_clicked()
{//获取当前行列QModelIndex curIndex = ui->treeView->currentIndex();int row = curIndex.row();int column = curIndex.column();//当前行列值包含-1值或当前节点非顶级节点时返回if( -1 == row || -1 == column){return;}QStandardItem *item = model->itemFromIndex(curIndex);if(item){QStandardItem *parentItem = item->parent();if(parentItem)parentItem->removeRow(row);elsemodel->removeRow(row);}
}void MainWindow::clicked()
{//获取当前行列QModelIndex curIndex = ui->treeView->currentIndex();int row = curIndex.row();int column = curIndex.column();//当前位置包含-1值返回if( -1 == row || -1 == column){return;}ui->statusbar->showMessage(curIndex.data().toString());
}

DEMO下载:点击跳转

运行效果如下:

觉得有帮助的话,打赏一下呗。。

           

相关文章:

  • SpringCloud分布式微服务链路追踪方案:Skywalking
  • 从0开始学习pyspark--pyspark的核心概念[第0节]
  • DFS,BFS最短路,树与图的深度/广度优先遍历,拓扑排序
  • 为什么Vim是程序员最喜欢的文本编辑器之一?
  • 对象被优化以后才是高效的C++编程
  • 达梦数据库 页大小与数据库字段长度的关系
  • LeetCode题解:205. 同构字符串,哈希表,JavaScript,详细注释
  • 第一周java。2
  • 桥接模式与适配器模式
  • QT截屏,截取控件为图片,指定范围截屏三种截屏方式
  • 【HTML入门】第一课 - 网页标签框架
  • stm32中IIC通讯协议
  • Xilinx FPGA:vivado关于真双端口的串口传输数据的实验
  • Spring Boot与Spring Batch的深度集成
  • iOS开发中用到的自定义UI库
  • [译]CSS 居中(Center)方法大合集
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • canvas 高仿 Apple Watch 表盘
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • PV统计优化设计
  • Vue.js-Day01
  • 构建二叉树进行数值数组的去重及优化
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 聊聊spring cloud的LoadBalancerAutoConfiguration
  • 盘点那些不知名却常用的 Git 操作
  • 前端攻城师
  • 使用agvtool更改app version/build
  • Hibernate主键生成策略及选择
  • 交换综合实验一
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • #{}和${}的区别?
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #我与Java虚拟机的故事#连载15:完整阅读的第一本技术书籍
  • #预处理和函数的对比以及条件编译
  • (+4)2.2UML建模图
  • (003)SlickEdit Unity的补全
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (WSI分类)WSI分类文献小综述 2024
  • (第二周)效能测试
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (十三)Java springcloud B2B2C o2o多用户商城 springcloud架构 - SSO单点登录之OAuth2.0 根据token获取用户信息(4)...
  • (四)linux文件内容查看
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (四)汇编语言——简单程序
  • (微服务实战)预付卡平台支付交易系统卡充值业务流程设计
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (转)iOS字体
  • (转)菜鸟学数据库(三)——存储过程
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .NET Framework 3.5中序列化成JSON数据及JSON数据的反序列化,以及jQuery的调用JSON
  • .NET 反射的使用
  • .NET 中的轻量级线程安全
  • .NET/C# 使用 #if 和 Conditional 特性来按条件编译代码的不同原理和适用场景