gpt4 book ai didi

c - GTK gtk_label_set_text 段错误

转载 作者:太空宇宙 更新时间:2023-11-04 07:32:48 25 4
gpt4 key购买 nike

我正在学习 GTK+,这个简单的应用程序每次运行时都会崩溃。

它在主窗口中创建一个标签,每次单击按钮(key_press_event)标签和标题都应该交换。

如果我在 change_title 函数中注释掉 gtk_label_set_text,标题会正确交替,应用程序不会崩溃。为什么 gtk_label_set_text 让我的应用崩溃?

#include <gtk/gtk.h>
#include <string.h>

const gchar first[]="FIRST";
const gchar last[]="LAST";

static void destroy(GtkWidget *window,gpointer data)
{
gtk_main_quit();
}

static gboolean change_title(GtkWidget *widget,GtkLabel *data)
{
if(strcmp(last,gtk_window_get_title(GTK_WINDOW(widget)))){
gtk_window_set_title(GTK_WINDOW(widget),last);
gtk_label_set_text(data,first);
} else {
gtk_window_set_title(GTK_WINDOW(widget),first);
gtk_label_set_text(data,last);
}
return FALSE;
}

int main(int argc,char **argv)
{
GtkWidget *window, *label;
gtk_init(&argc,&argv);

window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window),last);
gtk_widget_set_size_request(window,300,100);
g_signal_connect(window,"destroy_event",G_CALLBACK(destroy),NULL);

label = gtk_label_new("caasdasdjadnjadjahadjad");
gtk_container_add(GTK_CONTAINER(window),label);

g_signal_connect(window,"key_press_event",G_CALLBACK(change_title),GTK_LABEL(label));

gtk_widget_show_all(window);

gtk_main();
return 0;
}

编辑:我在使用 GDB 时发现了问题,标签指针未正确传递给 change_title 函数。我不知道为什么。 (例如:在 main() label = 0xb6406608 ,在 change_title() label = 0x807bda8)

最佳答案

在对 key_press_event 进行简单的 Google 搜索后,我发现该事件的回调在小部件和用户数据指针之间有另一个参数。原型(prototype)是这样的:

gboolean key_event_handler(GtkWidget *widget,GdkEventKey *event, gpointer data);

如此简单地将您的功能更改为:

static gboolean change_title(GtkWidget *widget, GdkEventKey *event, GtkLabel *data)

它应该可以工作。

关于c - GTK gtk_label_set_text 段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12090959/

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