【问题标题】:Making a Grid in GTK+在 GTK+ 中制作网格
【发布时间】:2009-05-07 02:17:45
【问题描述】:

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

【问题讨论】:

    标签: c algorithm gtk


    【解决方案1】:

    我个人会使用一个表格 - http://library.gnome.org/devel/gtk/stable/GtkTable.html - 并用按钮填充它 - http://library.gnome.org/devel/gtk/stable/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

    【讨论】:

      【解决方案2】:

      如果网格比较大,也可以考虑GtkTreeView

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

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

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2022-10-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多