谁熟悉QTreeView+QAbstractItemModel 求救

wylove08 2013-05-13 08:47:59
我建立了一个数据库,用类实现的 Database ,该类可以添加子节点, 结构和 分层tree 差不多。

然后建立了一个TreeModel: public QAbstractItemModel ,TreeModel->setDatabase( Database );

QTreeView->setModel( TreeModel );显示正常 。 TreeModel: data、setdata、rowcount、 index 、columnCount、flags 、parent 该实现的函数都实现了

现在想实现 多选删除, 以下大概代码:

//获取treeview 选择的节点(调试发现 QModelIndexList 排列顺序是以选择的顺序来排列的)

void Remove()
{
QModelIndexList selectedList = QtreeView->selectionModel()->selectedIndexes();

QListIterator<QModelIndex> i(selectedList);
while (i.hasNext())
{
QModelIndex modelIndex = i.next();
QModelIndex modelIndexParent = modelIndex.parent()

//子节点内部指针
Database* database = static_cast<Database*>(modelIndex.internalPointer () )

//父节点内部指针
Database* databaseParent = static_cast<Database*>(modelIndexParent.internalPointer () )

//开始删除
//一次只删除1个,没法连着删除,因为多选不是连着选的。
beginRemoveRows( modelIndexParent, modelIndex.row(), modelIndex.row() );

DatabaseSourceParent->ChildList().removeOne( Database );

endMoveRows()


}

}

我也不知道这样写是不是最好的办法,选择问题是 QModelIndexList selectedList 获取的顺序是选中顺序,我这循环先删除前面的QModelIndex,后面的QModelIndex变了,导致有问题,即时我用 倒叙( hasPrevious () ) 删也解决不了。

...全文
455 3 打赏 收藏 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ashy1q 2013-05-30
  • 打赏
  • 举报
回复
遇到类似的问题 我使用QListView+QFileSystemModel做文件管理器 添加删除功能 使用方法QModelIndexList selectedList = QtreeView->selectionModel()->selectedIndexes(); 得到的selectedList中会包括所选文件或目录的父目录Index,还有“..”(所选item为目录时包含此项) 楼主可以打印一下selectedList这里面不仅仅是你选择的那几个条目项吧!
wylove08 2013-05-14
  • 打赏
  • 举报
回复
beginRemoveRows( modelIndexParent, modelIndex.row(), modelIndex.row() ); //删除数据结构 endMoveRows() 好像需这样删除才有效。 看help beginRemoveRows 后面2个参数 都是连续节点的。
  • 打赏
  • 举报
回复
我的想法是你的数据存储的是数据的指针,删除时通过索引号先将待删除的数据指针保存在一个临时数组中,然后统一delete该数组记录的指针
内容概要:本文围绕“基于雅可比伪逆迭代的双臂协同轨迹规划与跟踪误差收敛性研究”展开,系统探讨了利用雅可比矩阵伪逆法实现双机械臂协同运动的轨迹规划方法,并通过Matlab代码实现了对系统跟踪误差收敛性的仿真验证。研究内容涵盖双臂协同的动力学建模、雅可比伪逆算法的迭代求解机制、轨迹跟踪控制器的设计,以及跟踪误差收敛性的数学证明与数值仿真分析,旨在提升多机械臂系统在复杂协作任务中的运动协调性、轨迹跟踪精度与控制稳定性。; 适合人群:具备机器人学、自动控制理论及数值计算基础,熟悉Matlab/Simulink仿真环境,从事多机械臂协同控制、轨迹规划算法开发及相关方向的研究生、科研人员或工程技术人员。; 使用场景及目标:①研究双机械臂系统在协同作业中的运动规划与控制策略;②掌握雅可比伪逆法在冗余自由度机器人运动学求解中的应用原理;③实现并验证轨迹规划算法的仿真性能与误差收敛特性;④为工业装配、协作搬运、精密操作等多臂机器人应用场景提供算法支持与技术参考。; 阅读建议:建议读者结合Matlab代码逐模块分析算法实现细节,重点关注雅可比矩阵的构建方法、伪逆求解过程及其在迭代控制中的应用机制,同时通过仿真结果对比分析不同参数对系统收敛性与跟踪精度的影响,宜在实际调试中调整增益参数与初始条件以深化对控制性能的理解。

21,503

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧