问题标签 [qtreeview]

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 投票
3 回答
6762 浏览

qt - QTreeView中的Qt上下文菜单中断选择

我有一个QTreeView安装了上下文菜单的类,如下所示:

但是,当显示上下文菜单时,QTreeView将不再响应鼠标单击。在QTreeView显示上下文菜单时单击项目将删除上下文菜单,但不会选择单击的项目。

当右键单击新项目时,这尤其令人迷惑,因为上下文菜单会在新项目上弹出,但是由于未选择该项目,因此上下文菜单的内容是指先前选择的项目。

0 投票
1 回答
2623 浏览

qt - 我的代码中是否存在用于填充 QTreeView 的错误?

我正在使用 PyQt 4.4。

最好用一些图片来展示。所有节点都应该有从 0 到 99 的叶子。它们正在使用canFetchMore()和增量加载fetchMore()。但是由于某种我不知道的原因,这仅适用于根节点。(图片1)

如果我折叠并展开一个节点,它会加载额外的 10 个值。(图二、三)

也很奇怪,它加载了 10 个值,因为代码每次调用只加载 5 个fetchMore(),这意味着在代码停止加载更多数据之前,它被调用了 2 次。

截图 1 截图 2 截图 3

我写了一个小例子来演示这个问题,只需使用python test.py. http://snipt.org/lLh

有谁知道是什么导致了这个错误?

0 投票
1 回答
6437 浏览

qt - 当对象在外部发生变化时更新 QListView

当模型对象在外部发生变化时,我有一个关于QTreeView(或QAbstractItemView的任何子类)更新的简单问题。假设一个列表显示了QAbstractItemModel的子类,并且该模型的一个项目在列表窗口之外发生了更改,我们希望使用更改来更新列表。实现这样的目标的通常策略是什么?我查看了QAbstractItemModel的 Qt 文档,当模型中的数据发生更改时,会(或应该)发出一个名为“ dataChanged ”的信号。但是由于这个信号(作为所有 QAbstractItemModel 函数/信号/插槽)与QModelIndex,正如文档明确指出的那样,这不是持久的,我是否应该以某种方式存储我的数据到QPersistentModelIndex(es)的映射,所以当我的数据更改时,我将能够找到相应的QPersistenModelIndex并将其用作各种参数QAbstractItemModel函数 ? 这就是QPersistentModelIndex (es) 的用途吗?还是我错过了什么?

谢谢你。

ps:我想我可以重新加载QTreeView,但是我不知道哪些项目被扩展或哪些被选中。是否有解决此问题并重新加载列表的策略?

0 投票
1 回答
10402 浏览

c++ - QTreeView 中某些索引的自定义文本颜色

我想使用自定义颜色(取决于与每一行相关的数据)在 QTreeView 小部件的一列中绘制文本。我试图重载 drawRow() 受保护的方法并像这样更改样式选项参数(一个精简的示例):

但显然我错过了一些东西,因为这似乎不起作用(我也试图改变QPalette::WindowText颜色角色)。

0 投票
1 回答
3807 浏览

c++ - 在 QTreeView 中找到 QModelIndex 的(视觉)位置的更简单方法

我对计算节点的物理位置很感兴趣,QTreeView但找不到这样做的方法(除了自己计算之外,考虑到 的鲁棒性,这很麻烦且容易出错QTreeView)。

是否有一种标准方法可以找到与 a 关联的数据的绘制位置QModelIndex(类似于将indexAt()位置映射到 a的方式QModelIndex)?

0 投票
2 回答
291 浏览

qt4 - 存储和编辑(GUI)类目录树结构的最优雅/安全/简单的解决方案?

我有一个稍微棘手的问题要解决;想象一下:

我的一个应用程序需要大量使用脚本,所以我的想法是为用户提供一种编写脚本片段并将它们组织成类似目录的树结构的方法。这很像带有子目录和源文件的源代码目录。

数据类/存储

我遇到的第一个问题是我需要找到一种存储整个树结构的好方法(在磁盘上,以及在运行时的应用程序中)。为此,我有以下想法:

  1. 使用可以使用 QObject 的父/子功能表示树的 QObject 派生类。这样,如果它们的父对象被删除,我就不必担心删除这些对象。
  2. 使用一个简单的类,它可能包含一个 QList(没有指针)的子级和一些存储每个组/脚本的属性的属性。
  3. 使用方法#2,但使用指针而不是静态对象 - 当我必须将组或树的一部分传递给函数等时,这将避免无用的复制。
  4. 使用 SQLite(或类似)数据库的实时后端,并在运行时查询它。这将避免一次加载整个树并将其保存在 RAM 中。
  5. 在文件系统上使用平面文件和目录结构;尽管我认为这会带来不必要的麻烦,因为无法存储有关对象的元信息。

编辑

我遇到的下一个问题是用户可能想要编辑整个树结构。他想单击一个组或脚本,编辑脚本代码,并可能在树中拖放目录和脚本;从而在途中改变整棵树的结构。

这会引发以下问题:

  1. 如果用户关闭编辑器,最好向他提供“您要保存更改吗?”。对话。很像一个文本编辑器,您不小心在现有文档中输入了一些内容,但您在没有保存更改的情况下退出了。- 这将要求我们编辑整个树的副本,并在需要时覆盖应用程序中的现有树。
  2. 允许拖放可能有问题...
    • ...使用存储方法#1:目前没有改变 QObjects 子级顺序的好方法。在运行时移动对象而程序的其他部分可能会访问它们也不是一个好主意。
    • ...使用存储方法 #2更容易,因为整个树像单个值一样处理,并且没有孩子我必须移动和重新父母。复制树的一部分会自动复制所有子节点,依此类推。不幸的是,这将意味着大量开销和灵活性损失(我不得不将整个树再次写入磁盘,因为我无法确定到底发生了什么变化)。

当我想到更多事情时,我可能会稍微更新一下这个问题,但我真的很好奇其他人是如何解决这个问题的。任何建议和想法表示赞赏。:)

0 投票
6 回答
29687 浏览

qt - 如何使项目视图在 Qt 中呈现富 (html) 文本

假设我的模型有带有以下 Qt::DisplayRole 字符串的项目

我希望 QTreeView(实际上是任何项目视图)将其呈现为富文本。相反,默认情况下,项目视图将其呈现为纯文本。如何达到想要的渲染效果?


实际上,这是一个搜索结果模型。用户输入文本,针对该文本搜索一些文档,并向用户呈现搜索结果,其中正在搜索的单词应该比周围的文本更粗。

0 投票
1 回答
3484 浏览

qt - 将垂直标题添加到 QTreeView

我有一个QTreeView子类(和QAbstractItemModel子类),它有一个很好的水平标题。我想添加垂直标题(从左侧向下)以匹配。但与QTableView具有单独的垂直 ( setVerticalHeader()) 和水平标题 ( setHorizontalHeader()) 不同的是,QTreeView它只允许单个标题 ( setHeader())。

我知道我可以假装最左边的列是标题并用不同的背景颜色渲染它(我不需要调整行大小或重新排列行的能力,所以我不必实现任何这些特殊行为)。但这并没有考虑到本地风格。例如,在我的系统上,标题有轻微的渐变,使它们看起来几乎是 3D。

因此,我正在寻找一种方法来添加适当的垂直标题(我猜这将是 的子类QHeaderView),或者在最左边的列下方呈现标题,但以正确的方式呈现它。

0 投票
1 回答
19036 浏览

c++ - 如何使用 QTreeView 获取有关所选项目的详细信息?

我将 QTreeView 与 QDirModel 一起使用,如下所示:

这很好用,但是,我不确定如何获取有关我选择的文件的详细信息。到目前为止我有这个:

但不知道现在该做什么,我想获取每个文件的名称和完整路径。一个例子真的很棒。谢谢你。

0 投票
2 回答
1415 浏览

c++ - 如何在 QTreeView 的 QAbstractItemModel 中创建人工节点

我的问题是关于 Qt 及其QAbstractItemModel

我有一个字符串和双精度 ( std::map<stringclass, double>) 的映射,我想在 Qt 小部件中呈现它。虽然我可以为此使用QTableView,但我想利用地图的键是“ abc.def.ghi”形式的事实,其中可以有多个以“ abc.def”开头的字符串,甚至更多以“”开头的字符串abc

所以我想设置一个树数据模型来呈现QTreeView中的项目,比如

my 的键std::map是树的叶子,所有其他节点都是临时和辅助构造,以支持折叠以方便用户使用。

不幸的是,方法rowCountindexcolumnCountdata有 const 修饰符,所以我不能简单地为我的QAbstractItemModel派生中的标题设置一个辅助数据结构并在那里更改该数据结构。

什么是最好的做法?我应该在我std::map的和QAbstractItemModel之间设置另一个类层还是有更聪明的方法来做到这一点?


编辑 1:在显示和使用QTreeViewstd::map时可以更改,因此辅助节点可能会被丢弃并重建。我的假设是处理此问题的最佳方法是重组QAbstractItemModel - 还是我应该简单地丢弃该模型并将新构造的模型分配给QTreeView?在那种情况下,我想我可以在构造函数中设置所有节点,而不会被方法的 const 性所困扰。