gpt4 book ai didi

c - 如何使用 C 在 GTK Stack Switcher 中使用图像

转载 作者:太空宇宙 更新时间:2023-11-04 03:18:47 26 4
gpt4 key购买 nike

我正在使用 C 在 gtk 中制作应用程序。我有一个带有 GtkStackSwitcher 的 GtkStack,但我不知道如何将图像/图标设置为堆栈切换器中的按钮。我在 gtkmm 和 C++ 中的应用程序遇到了类似的问题,但我能够在文档中找到所需的功能。这一次,在搜索了 GtkStack、GtkStackSwitcher 和 GtkContainer 的文档后,我没有找到 GtkStack 和 GtkStackSwitcher 中有用的东西。在 GtkContainer 中有函数 gtk_container_child_set_property ()。这可能是我正在寻找的功能,但我不知道如何将图标名称放入 GValue 以及是否可能。总结 - 我可以使用上述功能或使用任何其他方法将图标设置为 GtkStackSwitcher 的按钮吗?

编辑:也许可以用 css 来实现?为 GtkStack 和 GtkStackSwticher 设置背景图像不起作用,但为按钮设置背景图像有效。工作很糟糕但有效。图像不适合按钮,并且按钮不会调整为图像大小(如果我从 pixbuf 设置新按钮,按钮会调整大小)。那么 css 是可行的还是死路一条?

最佳答案

来自GtkStack文档,位于 Child Properties , 你可以看到属性 "icon-name" :

The “icon-name” child property

“icon-name” gchar *

The icon name of the child page.

Flags: Read / Write

Default value: NULL

正如您所指出的,我们可以使用 gtk_container_child_set_property在 GtkStack(一个 GtkContainer)上并设置图标。问题是堆栈使用图标或标题,而不是两者。

这是一个简单的 C 代码示例:

#include <gtk/gtk.h>

int main (int argc, char** argv) {
GtkBox *box;
GtkStack *stack;
GtkLabel *label1;
GtkLabel *label2;
GtkWindow *window;
GtkStackSwitcher *switcher;
GValue iconval1 = G_VALUE_INIT;
GValue iconval2 = G_VALUE_INIT;

gtk_init (&argc, &argv);

g_value_init (&iconval1, G_TYPE_STRING);
g_value_init (&iconval2, G_TYPE_STRING);

window = GTK_WINDOW(gtk_window_new(GTK_WINDOW_TOPLEVEL));
box = GTK_BOX(gtk_box_new(GTK_ORIENTATION_VERTICAL, 6));
stack = GTK_STACK(gtk_stack_new ());
switcher = GTK_STACK_SWITCHER(gtk_stack_switcher_new ());

label1 = GTK_LABEL(gtk_label_new("Stack Page 1"));
label2 = GTK_LABEL(gtk_label_new("Stack Page 2"));

gtk_stack_add_titled(stack, GTK_WIDGET(label1), "Page 1", "Page 1");
gtk_stack_add_titled(stack, GTK_WIDGET(label2), "Page 2", "Page 2");

gtk_widget_set_halign (GTK_WIDGET(switcher), GTK_ALIGN_CENTER);

g_value_set_string(&iconval1, "zoom-in-symbolic.symbolic");
g_value_set_string(&iconval2, "zoom-out-symbolic.symbolic");

gtk_container_child_set_property(GTK_CONTAINER(stack), GTK_WIDGET(label1), "icon-name", &iconval1);
gtk_container_child_set_property(GTK_CONTAINER(stack), GTK_WIDGET(label2), "icon-name", &iconval2);

gtk_stack_switcher_set_stack (switcher, stack);
gtk_box_pack_start (box, GTK_WIDGET(switcher), FALSE, FALSE, 6);
gtk_box_pack_start (box, GTK_WIDGET(stack), TRUE, TRUE, 6);

gtk_container_add (GTK_CONTAINER(window), GTK_WIDGET(box));

g_signal_connect(G_OBJECT(window), "destroy", gtk_main_quit, NULL);

gtk_widget_show_all (GTK_WIDGET(window));

gtk_main ();

return 0;
}

编译它:

gcc -o test main.c `pkg-config --cflags --libs gtk+-3.0`

结果应该是:

enter image description here

编辑:

根据评论中的要求:

Can you tell me also how to change icon sizes of stack switcher icons? I see that stack switcher has property "icon-size"...

GtkStackSwitcher拥有属性(property)"icon-size"但它是在 Gtk+ 3.20 中引入的。所以,为了使用这个属性,有这个要求。

要设置 Gtk+ 不提供 setter/getter 的属性,您应该使用 g_object_set(或 set_full)。

使用上面的代码:

   ...
switcher = GTK_STACK_SWITCHER(gtk_stack_switcher_new ());

g_object_set(G_OBJECT(switcher), "icon-size", GTK_ICON_SIZE_LARGE_TOOLBAR, NULL);

label1 = GTK_LABEL(gtk_label_new("Stack Page 1"));
...

该属性是一个 gint 值,因此您可以尝试一些值并验证大小。还有一个包含图标默认大小的枚举类型,它是 GtkIconSize .在示例中,我使用了 GTK_ICON_SIZE_LARGE_TOOLBAR (24px)。

关于c - 如何使用 C 在 GTK Stack Switcher 中使用图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48660495/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com