GTK+ 實戰/樹形檢視/元件
GtkTreeView 背後的最重要的概念是資料和資料在螢幕上的顯示方式之間完全分離。這通常被稱為模型/檢視/控制器設計 (MVC)。各種型別的資料(字串、數字、影像等)儲存在“模型”中。“檢視”然後被告知要顯示哪些資料、在哪裡顯示以及如何顯示。這種方法的優點之一是,您可以擁有多個檢視以不同的方式顯示相同的資料(例如目錄樹),或者以相同的方式多次顯示,而只需一份底層資料。這避免瞭如果在不同的上下文中重複使用相同資料,就會導致資料和程式設計工作量重複。此外,當模型中的資料更新時,所有檢視也會自動更新。
因此,雖然 GtkTreeModel 用於儲存資料,但還有其他元件決定哪些資料顯示在 GtkTreeView 中以及如何顯示。這些元件是 GtkTreeViewColumn 和 GtkCellRenderer。GtkTreeView 由樹形檢視列組成。這些是使用者感知為列的列。它們有一個可點選的列標題,帶有可隱藏的列標題,可以調整大小和排序。樹形檢視列不顯示任何資料,它們僅用作表示樹形檢視使用者端的裝置(排序等),並用作實際將資料渲染到螢幕上的元件的打包小部件,即 GtkCellRenderer 物件系列(我稱它們為“物件”因為它們不是 GtkWidgets)。有許多不同的單元格渲染器專門渲染某些資料,例如字串、畫素緩衝區或切換按鈕。稍後會詳細介紹。
單元格渲染器被打包到樹形檢視列中以顯示資料。樹形檢視列至少需要包含一個單元格渲染器,但可以包含多個單元格渲染器。例如,如果想要顯示一個“檔名”列,其中每個檔名左側都有一個小圖標表示檔案型別,那麼需要將一個 GtkCellRendererPixbuf 和一個 GtkCellRendererText 打包到一個樹形檢視列中。將渲染器打包到樹形檢視列中類似於將小部件打包到 GtkHBox 中。