c - 设置 GTK 容器子级的属性

标签 c user-interface gtk

我想更改堆栈切换器的项目标题。

这是 GUI 结构的片段:

<child>
          <object class="GtkStack" id="stack1">
            <property name="width_request">100</property>
            <property name="height_request">80</property>
            <property name="visible">True</property>
            <property name="can_focus">False</property>
            <child>
              <object class="GtkFixed" id="f1">
                <property name="visible">True</property>
                <property name="can_focus">False</property>
              </object>
              <packing>
                <property name="name">page2</property>
                <property name="title" translatable="yes">c</property>
              </packing>
            </child>
            <child>
              <object class="GtkFixed" id="f2">
                <property name="visible">True</property>
                <property name="can_focus">False</property>
              </object>
              <packing>
                <property name="name">page1</property>

这是代码:

GtkWidget       *window;
GtkWidget       *fixed1;
GtkBuilder      *builder;
GtkAdjustment   *adjustment1;
GtkWidget       *b1;
GtkWidget       *b2;
GtkWidget       *b3;
GtkWidget       *b4;
GtkWidget       *f1;
GtkWidget       *f2;
GtkWidget       *f3;
GtkWidget       *f4;
GtkWidget       *stack1;
GtkWidget       *stkSw;

int display = 4;

int main(int argc, char *argv[]) {
        gtk_init(&argc, &argv); // init Gtk

//---------------------------------------------------------------------
// establish contact with xml code used to adjust widget settings
//---------------------------------------------------------------------

        builder = gtk_builder_new_from_file ("scroll.glade");

        window = GTK_WIDGET(gtk_builder_get_object(builder, "window"));
        fixed1 = GTK_WIDGET(gtk_builder_get_object(builder, "fixed1"));

        b1 = GTK_WIDGET(gtk_builder_get_object(builder, "b1"));
        b2 = GTK_WIDGET(gtk_builder_get_object(builder, "b2"));
        b3 = GTK_WIDGET(gtk_builder_get_object(builder, "b3"));
        b4 = GTK_WIDGET(gtk_builder_get_object(builder, "b4"));
        f1 = GTK_WIDGET(gtk_builder_get_object(builder, "f1"));
        f2 = GTK_WIDGET(gtk_builder_get_object(builder, "f2"));
        f3 = GTK_WIDGET(gtk_builder_get_object(builder, "f3"));
        f4 = GTK_WIDGET(gtk_builder_get_object(builder, "f4"));
        stack1 = GTK_WIDGET(gtk_builder_get_object(builder, "stack1"));
        stkSw = GTK_WIDGET(gtk_builder_get_object(builder, "stkSw"));



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

        gtk_builder_connect_signals(builder, NULL);

        gtk_container_child_set_property (GTK_CONTAINER(stack1), f1, (const gchar*) "title", (const GValue*) "IVALUE");

        gtk_widget_show(window);

        gtk_main();

        return EXIT_SUCCESS;
}

插入此行会导致段错误:

        gtk_container_child_set_property (GTK_CONTAINER(stack1), f1, (const gchar*) "title", (const GValue*) "IVALUE");

我根据文档写了这一行: https://developer.gnome.org/gtk3/stable/GtkContainer.html#gtk-container-child-set-property

我没有按照上面的链接设置属性吗?或者我的代码中其他地方有错误吗?

最佳答案

要创建 GValue,你不能这样做:

(const GValue*) "IVALUE"

您必须初始化一个 GValue,设置字符串,然后才能传递它。最后你必须取消设置(释放)GValue。

GValue a = G_VALUE_INIT;
g_value_init (&a, G_TYPE_STRING);
g_value_set_string (&a, "IVALUE");

gtk_container_child_set_property (GTK_CONTAINER(stack1), f1, (const gchar*) "title", &a);

g_value_unset (&a);

阅读此处了解更多信息和更多示例:https://developer.gnome.org/gobject/stable/gobject-Generic-values.html

关于c - 设置 GTK 容器子级的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58322059/

相关文章:

c - 如何在 gdb 中查看 printf 的输出?

javascript - 深度链接无限滚动页面

python - 带有 urllib2 和 PyWebKitGtk 的 cookie

python - 如何更新 matplotlib hexbin 图?

c++ - Linux 注入(inject) C/C++ dll

c - 如何在 C 编程中创建循环内生成的变量数组

c - memset 用 'a' 填充文件

Java GUI 动态添加按钮

html - 为什么阿拉伯语 Noto 字体(或其他阿拉伯语字体)在 HTML/CSS 中呈现不正确?

python - 如何将 GtkTreePath 或 GtkTreeIter 获取到 GtkTreeModel 的最后一行?