gpt4 book ai didi

c++ - 如何维护树模型中父 QStandardItems 和数据库行 ID 之间的链接?

转载 作者:太空宇宙 更新时间:2023-11-04 14:02:14 25 4
gpt4 key购买 nike

我有一个小问题想弄清楚,我正在开发一个使用 QTreeView 的 QT 应用程序,我有一堆有子项的类别,所以它们看起来像

Parent 1
Parent 2
- Child 1
- Child 2
Parent 3

等等等等,所以在我的数据库中,我有包含所有常规详细信息(名称、ID、创建日期等)的行,而那些是子项的行则指定了它们的父项(所以 pid=parent row id ).然后我循环然后使用标准的 QSqlQuery 东西。但是我遇到的问题是……

项目通过 QStandardItem* item = new QStandardItem(icon, name); 添加到 TreeView ,然后附加行 model->appendRow(item); 但我的 child 需要调用 parentitem->appendRow(item); 所以父级的 QStandardItem* item。但是,如果不存储每个 item,我如何才能找出它是什么?

故事的寓意是,是否有一种方法可以执行以下操作之一而不会破坏性能。

  1. QStandardItem* 项 存储在一个数组中,以便我可以在子循环中引用父项?
  2. QStandardItem* item 分配一个 ID 或其他东西,然后我可以在添加 child 时引用它。
  3. 从数组生成 TreeView 模型,其中子数组元素作为子元素添加?
  4. 还有一些我没有想到的...

我似乎无法从数据库中找到任何带有 child 的 QTreeView 的好例子。

最佳答案

您只需要一个 QMap<int, QStandardItem*> rowItemMap .当您从数据库中检索具有给定行 ID 的行时,您会立即创建一个项目并将其添加到 map 中。然后将其添加到您在 map 中查找的父级。您需要创建一个虚拟父项作为根项。存储指向项目的指针没有错。对于合理数量的元素,这无关紧要。如果您考虑存储超过 10k 的项目,您可能需要考虑使用一个 View ,该 View 提供直到树的特定深度的传递闭包。通过 QSqlTableModel 映射这样的 View 会容易得多。 , 直接到树上,而不必将整个树从数据库复制到临时模型中。

关于c++ - 如何维护树模型中父 QStandardItems 和数据库行 ID 之间的链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18777395/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com