• 5918阅读
  • 6回复

困扰已久的问题,大家帮忙看看!~QTreeWidget的 [复制链接]

上一主题 下一主题
离线huyaowu
 

只看楼主 倒序阅读 楼主  发表于: 2010-10-30
— 本帖被 XChinux 执行加亮操作(2010-10-31) —
我想通过读数据库将内容显示在QTreeWidget上

数据库内的内容是这样的:

lsh    name     highlsh
1         a            0
2         b            1
3         c            1
4         d            3

其中highlsh是父节点的lsh,0就是root节点,要显示成这样:

a
|---b
|---c
      |----d

想了很久没想出好的方法,大家给个思路啊,不甚感激!
离线dbzhang800

只看该作者 1楼 发表于: 2010-10-30
感觉你应该去选择QTreeView 而不是 QTreeWidget
离线huyaowu

只看该作者 2楼 发表于: 2010-10-30
好的,谢谢
离线huyaowu

只看该作者 3楼 发表于: 2010-10-30
回 1楼(dbzhang800) 的帖子
能不能给个思路啊,我还是想不出来啊
离线langziyang

只看该作者 4楼 发表于: 2010-11-11
顶上同求这个问题

只看该作者 5楼 发表于: 2010-11-12
用哈希表, lsh做key, highlsh做值. ---> QHash<lsh, highlsh>
这样就可以了.
离线lejcey

只看该作者 6楼 发表于: 2010-11-14
给你一个我的实现,此段代码有内存泄露,需改进!

把tree中的数据变成可以放进数据库中的数据

  1. /*
  2. id dept tree parent
  3. 0 root(0) null
  4. |
  5. 1 +-- dept1(0) 0
  6. | |
  7. 2 | +-- sub dept 1(0) 1
  8. | |
  9. 3 | +-- sub dept 2(1) 1
  10. | |
  11. 4 | +-- subsub dept1(0) 3
  12. | |
  13. 5 | +-- subsub dept2(1) 3
  14. |
  15. 6 +-- dept2(1) 0
  16. |
  17. 7 +-- dept3(2) 0
  18. |
  19. ...
  20. */
  21. // 创建一个容纳拥有子孙的节点的迭代器堆栈
  22. QStack <QTreeWidgetItemIterator *> nodeItStack;
  23. QTreeWidgetItemIterator *it = new QTreeWidgetItemIterator(treeDept->topLevelItem(0));
  24. QTreeWidgetItemIterator *it2;
  25. quint16 id = 0;
  26. quint16 parent = 0;
  27. QStack <quint16> parentStack;
  28. while(*(*it)){
  29. // 第一次进入循环的时候,nodeItStack是空的,但id是0
  30. if (nodeItStack.isEmpty() && id != 0)
  31. break;
  32. // 如果当前迭代器所指向的节点拥有子节点
  33. if ((*(*it))->childCount() > 0){
  34. qDebug() << id << parent << (*(*it))->text(0);
  35. //parent = id;
  36. // 将当前节点的迭代器压入堆栈(它拥有子节点)
  37. nodeItStack.push(it);
  38. parentStack.push(id);
  39. // 将迭代器变为当前节点的第一个子节点,必须创建一个新的 it,
  40. // 否则栈中保存的上一个父节点的的指针和当前节点的指针相同了
  41. it = new QTreeWidgetItemIterator((*(*it))->child(0));
  42. ++id;
  43. }
  44. // 否则当前节点已经没有子节点了,那就输出
  45. else{
  46. // 弹出上一次压入堆栈的父节点,临时保存一下
  47. it2 = nodeItStack.pop();
  48. parent = parentStack.pop();
  49. // 如果当前节点不是是上一个父节点的最后一个,重新将上一个父节点压入堆栈
  50. // 否则就不再重新入栈了
  51. if ((*(*it2))->childCount() - 1 != (*(*it2))->indexOfChild(*(*it))){
  52. nodeItStack.push(it2);
  53. parentStack.push(parent);
  54. }
  55. qDebug() << id << parent << (*(*it))->text(0);
  56. ++*it;
  57. ++id;
  58. }
  59. }
  60. delete it;
  61. delete it2;

快速回复
限100 字节
 
上一个 下一个