繁体   English   中英

如何在GTK应用程序中创建多个视图

[英]How to make multiple views in GTK application

我想制作一个具有多个视图的GTK +应用程序,但我真的不知道如何以最佳方式实现它。 在每个视图中,我需要有一些标签和按钮。 首先,我尝试使用GtkStack进行应用,但是StackSwitcher的自定义选项很差(它的按钮在行中,而stackswitcher图标太小,即使具有“ icon-size”属性的最大可能尺寸)。

用正常按钮连接堆栈的页面切换可以解决这种情况,但是我不知道该怎么做。

我的第二种方法是使用多个窗口。 我能够制作一些窗口并使用按钮隐藏/显示它们。 不幸的是,该应用程序将在非常糟糕的PC上运行(将更多的PC连接到触摸屏,这会使它的性能甚至更差),经过一些测试,我可以说该应用程序存在一些滞后。 整个过程使所有窗口处于开始状态,然后将它们隐藏或显示(取决于按下哪个窗口的按钮)。

总结一下我的问题:

  1. 进行此类应用的最佳方法是什么? 使用多个窗口还是使用GtkStack?
  2. 如果用Windows如何优化整个东西?
  3. 如果与堆栈如何实现普通按钮上的switchng堆栈选项卡?

我更喜欢GtkStack。 它具有很棒的gtk_stack_set_visible_child_name ,让您通过其ID设置可见子级。 在以下代码段中,我使用GtkListBox进行切换(并且我必须存储带有子名称的GPtrArray

static void
row_activated (GtkListBox    *box,
               GtkListBoxRow *row,
               gpointer       udata)
{
  MyWid *self = udata;
  MyWidPrivate *priv = self->priv;

  gint row_index = gtk_list_box_row_get_index (row);
  gchar *path = g_ptr_array_index (priv->paths, row_index);

  gtk_stack_set_visible_child_name (priv->stack, path);
}

如果您想使用GtkButton事情就更简单了:

gchar *id; // just a string, that allows you to connect buttons and tabs
GtkWidget *child, *button;
child = create_tab_for_id (id); // not a real function! You should define it yourself
gtk_stack_add_named (stack, child, id);
button = create_button_for_id (id); // also not a real function
/* Time for magic */
g_signal_connect_swapped (button, "clicked", 
                          G_CALLBACK (gtk_stack_set_visible_child_name),
                          stack);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM