作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想制作一个具有多个 View 的 GTK+ 应用程序,但我真的不知道如何以最佳方式实现它。在每个 View 中我都需要一些标签和按钮。首先,我尝试使用 GtkStack 来制作应用程序,但是 StackSwitcher 的自定义选项很差(它的按钮位于行中,并且 stackswitcher 图标太小,即使具有“icon-size”属性的最大可能大小)。
将堆栈的页面切换与普通按钮连接可以解决此问题,但我不知道如何做这样的事情。
我的第二种方法是使用多个窗口。我能够制作一些窗口并用按钮隐藏/显示它们。不幸的是,该应用程序将在相当糟糕的电脑上运行(更重要的是,电脑连接到触摸屏,这使其性能更差),经过一些测试后,我可以说该应用程序有一些滞后。整个事情使所有窗口一开始就隐藏或显示它们(取决于按下哪个窗口上的按钮)。
总结我的问题:
最佳答案
我更喜欢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);
关于c - 如何在 GTK 应用程序中创建多个 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49507982/
我是一名优秀的程序员,十分优秀!