qt - 你可以设置一个 QWidget 来占据 QTreeWidget 的整个列吗?

标签 qt qt5 qtreewidget

我有一个自定义的 QTreeWidget 子类,我用它来显示轨道名称/等等。在我的 MIDI 编辑器项目 ( https://github.com/waddlesplash/ragingmidi ) 中。我想向这个树形小部件添加另一列,但一个小部件占据整个列而不是每个项目的小部件。

这可能吗,还是我必须找出其他解决方案?

编辑:我正试图完成这样的事情:http://www.anvilstudio.com/compose.jpg - 查看标题 View 中的最后一个“列”(“L/R Balance”之后的第 3 个“列”)显示所有行/注释(完全自定义,并且无论如何都是用 VB.NET 和封闭源代码编写的)。

编辑 2:您看不到它,但最后一列滚动而其他列在上图中滚动。在他们的方法中,您必须使用鼠标滚动。我想要一个滚动条。

最佳答案

查看 Qt 文档,似乎有几个选项可以实现此目的,但是在您决定哪种方法最适合您的需求之前,有几个重要因素需要解决。

  1. 此自定义树列中显示的内容是静态的还是动态的?
  2. 是否存在从您的 QTreeWidget 到您的自定义树列的行的一对一映射?

如果您的自定义树列内容是静态的并且存在一对一的行映射,请使用 QTreeWidget::setItemWidget ( QTreeWidgetItem * item, int column, QWidget * widget )功能应该足够了。

但是,如果您的自定义树列的内容是动态的,或者没有行的一对一映射,这将需要更复杂的方法。

如 QTreeWidget 文档中所述; “如果您想显示自定义动态内容或实现自定义编辑器小部件,请使用 QTreeView 和子类 QItemDelegate。”

QItemDelegate 及其子类为插入到 Qt 项 View (如 QTreeView、QListView、QTableView 等)中的项执行所有绘图功能。这实质上允许您控制插入到 QTreeView 类中的任何项目的所有绘图操作,除了能够将内容扩展到多行之外,还允许您绘制动态内容。

在为 QListWidget 实现了类似的方法后,我建议使用 QStyledItemDelegate代替QItemDelegate因为它允许您更轻松地将此小部件与应用程序的样式布局集成。由于您没有详细说明此自定义 QWidget 的确切用途,您可能还需要 QItemEditorCreator 提供的附加功能。 , QItemEditorCreatorBaseQItemEditorFactory .如果可以的话,我会在这里发布我开发的类似小部件,但遗憾的是它是专有软件套件的一部分。

关于qt - 你可以设置一个 QWidget 来占据 QTreeWidget 的整个列吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15284510/

相关文章:

具有 ARGB32 的 Linux 帧缓冲区。 Α?帧缓冲区如何支持 Alpha?

python - 跟踪 QTreeWidget 中的更改

python - 在 QTreeWidget 中升高和降低 QTreeWidgetItem?

c++ - 在 QTreeWidget 中插入时自动排序

c++ - 每当按下按钮时,如何在 Qt tableView 中自动选择下一行?

c++ - QLcdNumber 奇怪的行为

python - 属性错误 : QDialog object has no attribute setCentralWidget

c++ - 使用 Netbeans 启动并运行 Qt

c++ - Qt:打印原始文本

c++ - 用Qt播放特定的系统声音