问题标签 [qtreewidget]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2200 浏览

python - QTreeWidget 和 PyQt:从文件中保存和读回数据的方法

我正在开发一个包含QTreeWidget. 此小部件将具有带有子节点和/或其他兄弟节点的父节点。附加到每个节点将是一个唯一ID的整数和名称形式。

现在.....我可以或应该使用哪些方法将所有节点保存QTreeWidget到磁盘以及如何将它们读回??????

我要做的是遍历树并将每个节点保存到 sqlite 数据库中。我已经可以按照与树中完全相同的顺序执行此操作。但是......QTreeWidget及其相关QTreeWidgetItem对象没有可用于插入其他节点的 uniq 索引。

当我重建这棵树时,孩子们必须依附于他们的父母/祖先(那时他们已经存在于树中)。为此,我会跟踪ID已添加到树中的父母及其 s,例如parentID数组中的 (parent name, )。请注意,作为/parentID中的节点的位置与位置无关。它是由我自己创建的,并与节点名称一起存储在 sqlite db 中,就像某种标签一样,因为/不提供任何标签。QTreeWidgetWidgetItemQTreeWidgetQTreeWidgetItem

为了确定正确的父母我

  1. ParentIDsqlite DB 中获取,
  2. 搜索数组或QTreeWidget相同的ID
  3. 在 中选择该父级QTreeWidget
  4. 将 sqlite db 项目作为子节点添加到 treeview.

但是这种方式感觉很笨拙,因为每次添加节点时都会进行搜索,并且由于QTreeWidget/中缺少索引,WidgetItem我可以使用它来插入节点。

我知道这应该做得更优雅,资源更少。我不是在寻找确切的编码示例,而是更多地寻找使用 fromQTreeWidget和的方法和属性的想法和提示QTreeWidgetItem

有任何想法吗?

0 投票
1 回答
1533 浏览

c++ - 如何在不创建派生类的情况下模拟 QTreeWidget itemClicked 信号?

我无法为 QTreeWidget 的 ItemClicked() SIGNAL 找到合适的模拟。

有没有办法模拟它以便生成 ItemClicked 信号?

例如:我们可以在 QTreeWidget 的派生类中发出 ItemClicked 但不能(作为 QT 规则)在它之外。

0 投票
1 回答
3238 浏览

python - 单击项目视图的空白区域时清除选择

我用 做了一个树形结构QTreeWidget,效果很好。但我有一个问题。通常,对于树形结构,如果我想取消选择全部,我单击树形小部件的空白区域。但QTreeWidget似乎不支持这一点(或者我不知道如何)。

子分类或其他方法可以解决问题吗?确定单击空白区域似乎是解决方案的关键,但我找不到信号或任何东西。

0 投票
2 回答
1316 浏览

qt - Qt 小部件调整为宽度 = 256,而它不应该

表格设置:

QSplitter(在图像上突出显示)包含QTreeWidget(左)和QTableWidget(右):

QSplitter 中这两个小部件的非默认属性:

  • QTreeWidget

    最小尺寸/宽度 = 150

  • QTableWidget

    minimumSize / Width = 300
    sizePolicy / Horizo​​ntal Stretch = 1

基本上,上述设置指定了这两个组件的最小宽度,即QTableWidget 在表单调整大小期间会改变其宽度的组件。
右侧的按钮被放置QVBoxLayout并且它的大小是固定的。

问题:

虽然调整 formQTreeWidget的宽度从最小 150 到未知 256,然后才QTableWidget开始增长,而我预计QTreeWidget宽度根本不会增长,因为QTableWidget它是一个将 Horizo​​ntal Stretch 设置为 1 的宽度。

请注意,这与 无关QSplitter,因为当我将这两个小部件放入时也会发生同样的情况QHBoxLayout


更新:

QTreeWidgetmaximumSize / Width 设置为 150(与 minimumSize / Width 相同)以避免调整此小部件的大小给出以下结果:

QTreeWidget现在固定为 150,但是当调整窗口大小时,两个小部件之间会出现空白。这个差距增长到256-150=106,然后QTableWidget开始扩大。
基本上结果是相似的,但是现在占用的这个时间区域QTreeWidget是专门针对这个空白的。

我开始觉得这可能是一个 Qt 错误。

技术信息:

  • Ubuntu 10.04 (Lucid Lynx) x86_64
  • GCC 4.4.3
  • Qt 4.6.2
0 投票
1 回答
4376 浏览

python - PyQt QTreeWidget.clear() 导致崩溃

我已经安装了 python 2.5 和 PyQt 4.8.6。操作系统 - Windows Xp Sp2。我使用以下代码填充 TreeWidget:

它会在第二次使用时导致崩溃。如果我注释掉以下行之一:

或者

它可以正常工作。

我每 60 秒调用一次线程中的函数。这是 MyThread 类的定义。

这个线程在主窗口init ()时启动:

该小部件是使用 Qt Designer 创建的。

0 投票
2 回答
577 浏览

qt - 创建自定义 Qt 小部件或实现现有小部件?

所以我试图弄清楚如何设计我的线框。它本质上只是两个 QScrollArea,一个在另一个之上,每个都有一个标题(和标题内的按钮)。

在滚动区域的一种设计中,我希望有类似于 QListWidgetItems 列表的项目,但是它们在左侧会有一个小图像,在右侧有描述

在滚动区域的另一种设计中,我只想要填充颜色或图案/图像的矩形。它们都需要可选择并发出点击信号。

我应该采用 Class 方法,并创建一个新类来充当自定义小部件吗?实现 QWidget,并计算应该放置所有内容的位置,更改鼠标事件的背景颜色/不透明度等?或者我应该采取另一种方法吗?根据我的阅读,创建自定义小部件绝对是一件痛苦的事情。

下面是我想要设计的线框 - 是否有任何可用的东西可以完成这项工作?如果没有,我应该如何设计这些?我考虑过使用几个 QListWidgets 或 QTreeWidgets,但它们无法完成我正在寻找的一切。

自定义线框

0 投票
1 回答
11465 浏览

c++ - 遍历 QTreeWidget 节点

正如我在过去几个月中多次发布的那样,我正在用 Qt 编写日记/日记应用程序。条目在 QTreeWidget 中按年、月、日和条目(按天对条目排序的默认配置)或按年、月和条目(其中来自同一个月的所有条目分组在一起)进行排序

入口节点有两列:第一列是可见的并保存入口名称。第二列是不可见的,它保存数据库中相应条目的行号。选择该条目后,程序会根据该行号执行选择查询并显示内容。根、年、月(和日,如果启用)节点也有第二列,但其上的行号始终为 -1。(有效行数从 0 开始)

日记工具栏已经有后退和前进按钮,可以让用户查看下一个和上一个条目。虽然这个功能已经可以工作,但树中当前选定的项目不会随之改变,这就是我要修复的问题。

我决定最好的方法是使用循环函数扫描每个隐藏列的第二个值,直到找到正确的行号。每次单击后退/前进按钮都会再次调用此函数,因此一旦我开始工作,所选节点将始终与正在查看的当前条目匹配。

缺点是如果数据库变得很大,这种方法可能会很慢,但我对此无能为力。用户可能会删除条目或将它们随机播放,因此仅依赖 rownumber++ 或 rownumber-- 可能会导致问题。由于数据库不会填写缺失的行号,而只是继续下一个行号,因此如果程序始终假定数据库中的每一行在任何给定时间仍然存在,则可能会出现问题。

我的问题是如何扫描 QTreeWidget 中每个节点的特定列?

0 投票
2 回答
10336 浏览

python - PyQt - 将 XML 加载到 QTreeWidget

我正在尝试在 PyQt 中制作一个基本的 XML 故事制作器。到目前为止,我已经能够弄清楚我自己的一切,但我遇到了一些障碍。我不知道如何将 XML 文件加载到 QTreeWidget 中。我需要保留层次结构,但所说的层次结构似乎是随机的。我将发布我的代码,请记住 Open 函数不起作用(原因很明显):

0 投票
1 回答
20426 浏览

python - PyQT QTreeWidget 迭代

我在QTreeWidget中有两列,一列代表url 列表,第二列代表结果。我已经在第一列中加载了 url 列表,现在我想迭代这个列表,并在迭代期间更改第二列中的文本。如何做到这一点?

0 投票
1 回答
3233 浏览

c++ - QTreeWidgetItem:如何获取选中的项目?

我目前是一名学生程序员,在工作中使用 Qt 构建 GUI 界面,目前在 QTreeWidgetItem 上的 Qt 文档中找到解决方案时遇到问题。我目前有一个界面,其中包含用于编辑、删除和复制我的QTree. 了解我的树的填充方式可能对您很重要。中显示的项目QTree以这种方式从向量中动态附加。

现在我真的需要一种方法来找出用户在其中选择了哪个项目,QTree以便我可以将其从 Vector 中删除。我的psuedo是识别哪一行被选中,确认删除,删除itemAt(item selected),重新分配ID列;因为每个实例都在此列中分配了一个编号。我在看这个帖子,三年前发布;但它主要是指回我已经审查过的文档。另外,选择的答案似乎非常不确定,因为其他答案似乎一直在正确的轨道上。我知道这个答案可能就在我面前;但我能说什么,菜鸟将是菜鸟,我很难理解实施。请只留下富有成效的反馈,因为我只对学习和完成这项任务感兴趣。提前致谢。