跳转至内容

GTK+ 实战/树形视图/组件

来自维基教科书,开放世界中的开放书籍

GtkTreeView 背后的最重要的概念是数据和数据在屏幕上的显示方式之间完全分离。这通常被称为模型/视图/控制器设计 (MVC)。各种类型的数据(字符串、数字、图像等)存储在“模型”中。“视图”然后被告知要显示哪些数据、在哪里显示以及如何显示。这种方法的优点之一是,您可以拥有多个视图以不同的方式显示相同的数据(例如目录树),或者以相同的方式多次显示,而只需一份底层数据。这避免了如果在不同的上下文中重复使用相同数据,就会导致数据和编程工作量重复。此外,当模型中的数据更新时,所有视图也会自动更新。

因此,虽然 GtkTreeModel 用于存储数据,但还有其他组件决定哪些数据显示在 GtkTreeView 中以及如何显示。这些组件是 GtkTreeViewColumn 和 GtkCellRenderer。GtkTreeView 由树形视图列组成。这些是用户感知为列的列。它们有一个可点击的列标题,带有可隐藏的列标题,可以调整大小和排序。树形视图列不显示任何数据,它们仅用作表示树形视图用户端的设备(排序等),并用作实际将数据渲染到屏幕上的组件的打包小部件,即 GtkCellRenderer 对象系列(我称它们为“对象”因为它们不是 GtkWidgets)。有许多不同的单元格渲染器专门渲染某些数据,例如字符串、像素缓冲区或切换按钮。稍后会详细介绍。

单元格渲染器被打包到树形视图列中以显示数据。树形视图列至少需要包含一个单元格渲染器,但可以包含多个单元格渲染器。例如,如果想要显示一个“文件名”列,其中每个文件名左侧都有一个小图标表示文件类型,那么需要将一个 GtkCellRendererPixbuf 和一个 GtkCellRendererText 打包到一个树形视图列中。将渲染器打包到树形视图列中类似于将小部件打包到 GtkHBox 中。

华夏公益教科书