5

我不是要代码实现,但考虑到 GTK+ 的技能,从抽象的角度来看,实现网格以使每个方块都可以点击等的最佳方式是什么?

4

3 回答 3

6

就我个人而言,我会使用一个表格 - http://library.gnome.org/devel/gtk/stable/GtkTable.html - 并用按钮填充它 - http://library.gnome.org/devel/gtk/稳定/GtkButton.html。从那里开始,如果您不希望按钮看起来像按钮,我会设置浮雕 - http://library.gnome.org/devel/gtk/stable/GtkButton.html#gtk-button-set-relief - 无。

这样做会给您一个网格,其中每个元素的大小相同,并且当您单击网格中的项目时会触发一个事件。

上面假设网格将有不止一行,如果您只计划有一行,您最好使用 GtkHButtonBox - http://library.gnome.org/devel/gtk/stable/GtkHButtonBox.html - 或 GtkVButtonBox - http://library.gnome.org/devel/gtk/stable/GtkVButtonBox.html

于 2009-05-07T02:41:15.993 回答
5

如果网格很大,您也可以考虑GtkTreeView

它可以将树显示为网格,并支持矩形选择。单元格可以显示文本、数字和简单的小部件,如按钮、切换、选项菜单、进度条等。即使在大型数据集(数千行)上,它也表现良好,并且具有列排序等不错的功能。

然而,API 相当复杂 :-( 这是一个完整的 MVC 东西,需要花点时间才能让它正常工作。

gtk-demo 中有一些示例代码:查看“Tree View”下的“Editable Cells”演示。

于 2009-05-07T10:28:01.923 回答
0

我赞同 mlowen 的建议,使用 GtkTable 作为网格的主要组织,很容易获得类似网格的外观。如果您不需要按钮的内置绘图,您可能还想研究用普通的GtkEventBox填充每个单元格。

事件框是一个不可见的小部件,它基本上添加了一个窗口并使覆盖区域可点击。让 GTK+ 的一些“静默”小部件更具交互性是很有用的,例如,它通常用于GtkLabel后面以使其可点击;如果标签为您的需求提供了足够的绘图功能,那么这也是一种可能的继续方式。

于 2009-05-07T06:42:57.970 回答