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

【接口封装】——18、添加目录项列表响应

 解释:

1、封装内容:列表显示

2、Qt::UserRole:设置不同的值,以此区分多级目录项

函数定义:

	void onTreeItemClicked(QTreeWidgetItem* item);
	void onTreeItemDoubleClicked(QTreeWidgetItem* item);
	void onTreeItemExpanded(QTreeWidgetItem* item);
	void onTreeItemCollapsed(QTreeWidgetItem* item);	//缩放
    void initContact();

源代码:


void CCMainWindow::initContact()
{

	//根项
	QTreeWidgetItem* rootItem = new QTreeWidgetItem;
	rootItem->setData(0, Qt::UserRole, 0);  //根项设置为 0,子项为 1, 以示区分根项子项

	RootContactItem* rootWidget = new RootContactItem(true, ui.treeWidget);
	rootWidget->setText(RootContact_TEXT);

	ui.treeWidget->addTopLevelItem(rootItem);	//添加顶级项
	ui.treeWidget->setItemWidget(rootItem, 0, rootWidget);

	//连接根项目录的信号与槽函数
	connect(ui.treeWidget, &QTreeWidget::itemClicked, this, &CCMainWindow::onTreeItemClicked);
	connect(ui.treeWidget, &QTreeWidget::itemDoubleClicked, this, &CCMainWindow::onTreeItemDoubleClicked);
	connect(ui.treeWidget, &QTreeWidget::itemExpanded, this, &CCMainWindow::onTreeItemExpanded);
	connect(ui.treeWidget, &QTreeWidget::itemCollapsed, this, &CCMainWindow::onTreeItemCollapsed);		//折叠


}

void CCMainWindow::onTreeItemClicked(QTreeWidgetItem * item)
{
	bool isRoot = !(item->data(0, Qt::UserRole).toBool());	//根项被设置为0,isRoot:true
	if (isRoot) {
		item->setExpanded(!item->isExpanded());
	}

}

void CCMainWindow::onTreeItemDoubleClicked(QTreeWidgetItem * item)
{
	bool isChild = item->data(0, Qt::UserRole).toBool();//子项被设置为1
	if (isChild) {
		qDebug() << QString::fromLocal8Bit("打开聊天窗口:") << item->data(0, Qt::UserRole + 1);
		
	}

}

void CCMainWindow::onTreeItemExpanded(QTreeWidgetItem * item)
{
	bool isRoot = !(item->data(0, Qt::UserRole).toBool());	//根项被设置为0,isRoot:true
	if (isRoot) {
		RootContactItem* rootWidget = dynamic_cast<RootContactItem*>(ui.treeWidget->itemWidget(item, 0));
		if (rootWidget) {
			rootWidget->setExpanded(true);
		}
	}
}

//折叠:collapsed
void CCMainWindow::onTreeItemCollapsed(QTreeWidgetItem * item)
{
	bool isRoot = !(item->data(0, Qt::UserRole).toBool());	//根项被设置为0,isRoot:true
	if (isRoot) {
		//dynamic_cast:强制类型转换
		RootContactItem* rootWidget = dynamic_cast<RootContactItem*>(ui.treeWidget->itemWidget(item, 0));
		if (rootWidget) {
			rootWidget->setExpanded(false);
		}
	}

}




	RootContactItem(bool hasArrow = true, QWidget *parent = nullptr);

http://www.dtcms.com/a/55162.html

相关文章:

  • AMD(xilinx) FPGA书籍推荐
  • RabittMQ保证消息不丢失的几种手段
  • Spring Boot 项目中慢SQL优化方案
  • 基于微信小程序的超市购物系统+论文源码调试讲解
  • 【文心索引】搜索引擎测试报告
  • 【计算机网络】计算机网络的性能指标——时延、时延带宽积、往返时延、信道利用率
  • Trae IDE新建C#工程
  • 双目立体视觉(6.1)测距
  • 2025年科技趋势深度解析:从“人工智能+”到量子跃迁的技术革命
  • 练习题:72
  • 时序数据库 TDengine 化工新签约:存储降本一半,查询提速十倍
  • 基于NIST后量子算法的混合加密系统
  • 动态规划背包刷题
  • 量化交易全面入门指南(2025最新版)
  • 智能疫苗查漏补种智能体创建逻辑和步骤
  • Nodemailer使用教程:在Node.js中发送电子邮件
  • HiveServer2与Spark ThriftServer详细介绍对比
  • 深度学习模型Transformer核心组件—自注意力机制
  • python-leetcode-解决智力问题
  • MyBatis-Plus 与 Redis
  • HarmonyOS Next元服务网络请求封装实践
  • 小米安全攻防工程师面试题解析
  • VMware16虚拟机安装Linux-centos教程最新
  • 时序数据库 InfluxDB 3.0 版本性能实测报告:写入吞吐量提升效果验证
  • starrocks如何配置多个hive数据源,其中一个是kerberos认证
  • 【第19节】C++设计模式(行为模式)-Command(命令)模式
  • Windows 11【1001问】打开Windows 11任务管理器的11种方法
  • MySQL中的GROUP BY、DISTINCT和HAVING说明
  • java开发常用注解
  • Flink深入浅出之01:应用场景、基本架构、部署模式