[英]How to build a tree in GTK4 (>= 4.10)
如文檔所述,自 4.10 以來,GTK4 中的 TreeView已被棄用。 推薦的替代品是 ColumnView。 但是,我找不到關於如何通過 ColumnView 在 GTK4 中構建類似 treeView 的小部件的明確文檔或示例。 我發現可能與它相關的TreeExpander但我仍然不知道如何處理它。
我所做的一個非常簡短的概述:
setup
處理程序中,像往常一樣創建一個顯示小部件,而不是使用您的顯示小部件作為 Gtk.ListItem 的子項,而是創建一個 Gtk.TreeExpander,並使該子項成為 Gtk.ListItem 並使顯示小部件成為擴張器。bind
處理程序中,從提供的 object 中獲取顯示小部件和 model 項。這里的一個復雜問題是 object 可能是一個 Gtk.TreeListRow,其項可能是另一個 Gtk.TreeListRow,因此更難到達 895361。 像往常一樣將小部件綁定到 model 項目。 然后從 Gtk.ListItem position 中獲取 Gtk.TreeListRow 並將擴展器的list-row
屬性設置為它。Gtk.TreeListRow.expanded
屬性的notify
信號來執行此操作。root_store
作為 Gtk.ColumnView 的 model(像往常一樣包裝在 Gtk.SelectionModel 之后)。 您必須將passthrough
屬性設置為false
,否則不會出現擴展器。 如果您按需加載子項目,那么autoexpand
也應該是false
。bind
處理程序需要適應 Gtk.TreeListRow 參數。簡化和性能改進很可能是可能的,或者 Gtk4 的更高版本可能會引入一些便利以使其不那么繁瑣。
我正在使用上述策略開發文件瀏覽器實現,目前位於https://github.com/elementary/files/tree/gtk4-treelistmodel但這可能會合並到其他分支(或放棄)。 請注意,此分支正在開發中並且包含未解決的錯誤,但項目的顯示有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.