【问题标题】:Creating array of buttons [duplicate]创建按钮数组[重复]
【发布时间】:2016-08-15 15:06:19
【问题描述】:

请帮我创建按钮数组。这是我到目前为止所做的,但我相信我做错了,因为我的程序没有按应有的方式运行。

/*array is here*/
GtkWidget *button[2];
int i;
for (i=0; i<2; i++)
{
    button[i]=gtk_button_new();
}

button[0] = gtk_button_new_with_label ("Run shellscript");

g_signal_connect (button[0], "clicked",
        G_CALLBACK (callback), "shellscript");

gtk_box_pack_start (GTK_BOX (box1), button[0], TRUE, TRUE, 0);

gtk_widget_show(button[0]);

button[1] = gtk_button_new_with_label ("Run program2 ");

g_signal_connect (button[1], "clicked",
        G_CALLBACK (callback), "program2");

gtk_box_pack_start (GTK_BOX (box1), button[1], TRUE, TRUE, 0);

gtk_widget_show(button[1]);

【问题讨论】:

  • 它应该如何运行?以及它是如何运行的?
  • 嗯基本上它根本不运行,原因在数组中,因为当我刚刚使用 gtkWidget *button1; GtkWidget *button2;一切正常,,,现在它没有数组
  • 请发Minimal, Complete, and Verifiable example 并尝试更好地缩进您在问题中输入的代码。
  • 如果你的程序甚至没有编译,它怎么能运行?我怀疑For (i=... 编译。
  • 你有一个泄漏。首先,您创建一个按钮并将指向它的指针分配给数组的每个元素。然后创建 另一个 按钮并重新分配数组中的指针,使您在循环中使用gtk_new_button 创建的第一个按钮无法访问。

标签: c arrays button gtk parameter-passing


【解决方案1】:

有几个问题:

您的循环是无用的,因为您随后手动创建按钮,并造成内存泄漏。删除整个块。

从您的其他代码示例中,我看到您没有在顶级窗口上调用 gtk_widget_show_all。它的工作方式类似于 gtk_widget_show,只是它是递归的,并且会显示小部件及其所有子项。

我可以通过这 2 个修改运行您的代码示例。但是,Xrandr 错误完全不相关,与您的环境有关。检查您是否可以正常运行另一个 GTK 应用程序(例如 gtk-demo,与 GTK 一起安装)。

【讨论】:

    猜你喜欢
    • 2020-10-04
    • 1970-01-01
    • 2013-02-06
    • 1970-01-01
    • 2016-04-24
    • 2020-09-11
    • 1970-01-01
    • 1970-01-01
    • 2021-05-09
    相关资源
    最近更新 更多