自定义 QTreeView 项目

Posted

技术标签:

【中文标题】自定义 QTreeView 项目【英文标题】:Customize QTreeView items 【发布时间】:2012-02-24 13:53:40 【问题描述】:

我完全是 PySide 和 Qt 的新手,现在需要创建一个应用程序,它具有带有样式项目的树视图。每个项目需要两行文本(不同样式)和一个按钮。许多项目应该在视图中,所以我选择了 QTreeView 而不是 QTreeWidget。现在我设法将简单的文本项(非样式)添加到 QTreeView 并且几乎不知道如何在一个项目上放置多个小部件。你能举个例子说明如何创建这样的设计吗?

我在互联网上找到了一些示例,与我想要的类似,但它们都是 C++ 的,如何将委托和其他东西转换为 Python 并不明显。我现在真的对这一切感到困惑......

【问题讨论】:

【参考方案1】:

我建议您使用简单的QTreeWidget 并使用setItemWidget 插入复杂的小部件。虽然 Qt 的 widhets 是外星人,但它们绘制起来并没有那么重,但是:

您不应创建委托。 您不应该处理事件(如果您要将按钮放置在视图中并使用委托绘制它,则必须处理 所有 其事件,例如 mouseOver改变焦点等等。这是很多的工作。

【讨论】:

使用setItemWidget 可以为项目设置一个小部件。以及如何在每个项目上有几个 QLabels 和一个 QPushButton?应该有QPanel之类的东西,但好像不存在。 @chersanya,首先,您可以为每列设置单独的小部件,然后您的小部件可以具有非常复杂的内部结构。 @Lol4to 以及如何制作我的小部件的“非常复杂的内部结构”? @chersanya,与您通常创建 GUI 的方式相同。您甚至可以在 UI 设计器中创建表单并将此表单作为小部件传递。 @chersanya,list->setItemWidget(item, column, QUiLoader().load('form.ui'))load 方法只返回 QWidget。您可以照常操作

以上是关于自定义 QTreeView 项目的主要内容,如果未能解决你的问题,请参考以下文章

如何向qtreeview 自定义model 添加新行

在 QTreeView 中使用自定义角色而不是 DisplayRole

在 PySide 的 QTreeView 中更改时如何获取项目的先前名称

带有自定义项的 QTreeView

如何从 QStyle 获取 QTreeView 的标识宽度

QTreeView、QTableView、不同层次层的显示项