正如我在过去几个月中多次发布的那样,我正在用 Qt 编写日记/日记应用程序。条目在 QTreeWidget 中按年、月、日和条目(按天对条目排序的默认配置)或按年、月和条目(其中来自同一个月的所有条目分组在一起)进行排序
入口节点有两列:第一列是可见的并保存入口名称。第二列是不可见的,它保存数据库中相应条目的行号。选择该条目后,程序会根据该行号执行选择查询并显示内容。根、年、月(和日,如果启用)节点也有第二列,但其上的行号始终为 -1。(有效行数从 0 开始)
日记工具栏已经有后退和前进按钮,可以让用户查看下一个和上一个条目。虽然这个功能已经可以工作,但树中当前选定的项目不会随之改变,这就是我要修复的问题。
我决定最好的方法是使用循环函数扫描每个隐藏列的第二个值,直到找到正确的行号。每次单击后退/前进按钮都会再次调用此函数,因此一旦我开始工作,所选节点将始终与正在查看的当前条目匹配。
缺点是如果数据库变得很大,这种方法可能会很慢,但我对此无能为力。用户可能会删除条目或将它们随机播放,因此仅依赖 rownumber++ 或 rownumber-- 可能会导致问题。由于数据库不会填写缺失的行号,而只是继续下一个行号,因此如果程序始终假定数据库中的每一行在任何给定时间仍然存在,则可能会出现问题。
我的问题是如何扫描 QTreeWidget 中每个节点的特定列?