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

QModelIndex 与QStandardItem相互转换

目录

 1、 QModelIndex 转换成QStandardItem

2 、QStandardItem 转换成 QModelIndex

3、示例

4、总结


 1、 QModelIndex 转换成QStandardItem

QStandardItem * item=QStandardItemModel::​itemFromIndex(const QModelIndex & index) const

借助QStandardItemModel来完成

QModelIndex index = /* 当前项 QModelIndex */;
QStandardItemModel model = /* 当前view对应的model */;
QStandardItem* item = model.itemFromIndex(index);
if (item) {// 现在你有一个 QStandardItem 对象,可以使用它进行操作// 例如,你可以使用 item->setText() 来设置文本
}

请注意,你需要确保你的QModelIndex实际上是与QStandardItemModel关联的,否则itemFromIndex()可能会返回nullptr。如果你使用的是不同类型的模型,你可能需要编写自定义代码来将QModelIndex中的数据提取到QStandardItem中。 

2 、QStandardItem 转换成 QModelIndex

QModelIndex model = QStandardItem::​index() const

要将 QStandardItem 转换为 QModelIndex,你通常需要知道 QStandardItem 在哪个模型中以及其在模型中的位置。一般情况下,QStandardItem 并没有直接的方法来将其转换为 QModelIndex,因为 QStandardItem 是视图和模型之间的中介,而不是直接在模型中存储数据。

然而,你可以通过模型的方法来获取 QModelIndex,从而与特定的 QStandardItem 关联起来。这需要使用模型的 index() 方法。以下是一个示例:

QStandardItem *item = /* 你的 QStandardItem */;
QStandardItemModel *model = static_cast<QStandardItemModel*>(item->model());if (model) {QModelIndex index = model->indexFromItem(item);if (index.isValid()) {// 现在你有了与 QStandardItem 关联的 QModelIndex// 你可以使用 index 进行进一步的操作}
}

在这个示例中,首先你需要获取 QStandardItem 所属的模型(假设是 QStandardItemModel)。然后,你可以使用模型的 indexFromItem() 方法来获取 QModelIndex。如果 QStandardItem 不是 QStandardItemModel 的一部分,或者模型不是 QStandardItemModel,你需要相应地调整代码以适应你的模型类型。

3、示例

从当前点击的节点获取点击的节点子项

QModelIndex curIndex = m_treeView->indexAt(pos);
QStandardItemModel* model = static_cast<QStandardItemModel*>(m_treeView->model()) ;
QStandardItem* SelectTreeItem = model->itemFromIndex(curIndex);

4、总结

QModelIndex和QStandardItem的相互转换借助了QStandardItemModel。

思考:从pos获取QModelIndex,哪有没有接口直接获取QStandardItem,不就不用转得那么麻烦了。。。。。

http://www.lryc.cn/news/213472.html

相关文章:

  • Linux - 进程地址空间
  • 系统架构设计师-第16章-嵌入式系统架构设计理论与实践-软考学习笔记
  • pod进阶
  • 系列四十七、Spring的事务传播行为案例演示(七)#NOT_SUPPORTED
  • 54.RabbitMQ快速实战以及核心概念详解
  • Qt TreeView 设置节点不可编辑
  • python django获取某个角色的某个数据和——例如:获取所有订单的应付金额总和
  • 如何在React项目中引用less
  • NUXT前端服务端渲染技术框架
  • 力扣每日一题90:子集
  • 「linux基础」上传代码到github/gitee
  • Hafnium总体考虑
  • C#__对Json文件的解析和序列化
  • 如果一定要在C++和JAVA中选择,是C++还是java?
  • 如何运行深度学习项目代码
  • C语言 每日一题 day9
  • 通讯网关软件032——利用CommGate X2OPC实现OPC客户端访问Modbus TCP设备
  • [计算机提升] 查看系统软件
  • 【mysql】单表数据量过大解决方案
  • Kafka - 3.x 消费者 生产经验不完全指北
  • UDP网络编程的接受与发送信息
  • RK3588开发笔记-USB3.0接口调试
  • AI绘画|midjourney入门保姆教程,30秒出专业大片,国内直接使用
  • 阿里发布AI编码助手:通义灵码,兼容 VS Code、IDEA等主流编程工具
  • 【Linux】-进程控制(深度理解写时拷贝、exit函数、return的含义以及makefile编译多个程序)-进程创建、进程终止、进程等待、进程程序替换
  • 【mfc/VS2022】计图实验:绘图工具设计知识笔记3
  • Leetcode—1488.避免洪水泛滥【中等】
  • CSS与基本选择器
  • 回归算法|长短期记忆网络LSTM及其优化实现
  • 小米电视播放win10视频 win10共享问题