正如文档所说,GTK4 中的 TreeView自 4.10 起已被弃用。推荐的替代品是 ColumnView。但是,我找不到关于如何通过 ColumnView 在 GTK4 中构建类似树状视图的小部件的明确文档或示例。我发现可能TreeExpander与它有关,但我仍然不知道如何处理它。
我所做的一个非常简短的概述:
setup处理程序中,像往常一样创建一个显示小部件,然后不使用显示小部件作为 Gtk.ListItem 的子项,而是创建一个 Gtk.TreeExpander,并将其作为 Gtk.ListItem 的子项,并使显示小部件作为 Gtk.ListItem 的子项。扩展器。bind处理程序中,从提供的对象中获取显示小部件和模型项。这里的一个复杂之处是该对象可能是一个 Gtk.TreeListRow,其项目可能是另一个 Gtk.TreeListRow,因此获取模型项目更加困难。像往常一样将小部件绑定到模型项。然后从 Gtk.ListItem 位置获取 Gtk.TreeListRow 并list-row为其设置扩展器的属性。notify该属性的信号Gtk.TreeListRow.expanded来执行此操作。root_storeGtk.ColumnView 的模型(像往常一样包装在 Gtk.SelectionModel 之后)。您必须passthrough将该属性设置为,false否则不会出现扩展器。如果您按需加载子项目,那么autoexpand也应该如此false。bind处理程序需要适应 Gtk.TreeListRow 参数。简化和性能改进很可能是可能的,或者 Gtk4 的更高版本可能会引入一些便利性以使其不那么繁琐。
我正在使用上述策略开发文件浏览器实现,目前位于https://github.com/elementary/files/tree/gtk4-treelistmodel,但这可能会合并到其他分支(或放弃!)。请注意,该分支正在开发中,包含未解决的错误,但项目的显示正常。
| 归档时间: |
|
| 查看次数: |
1138 次 |
| 最近记录: |