- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在学习 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/
我希望有人能帮助我解决让我发疯的内存泄漏问题。通过多轮故障排除,我已将问题范围缩小到一个特定函数的一个特定部分,该函数根据传入的网络消息更新 GTK 标签。只要程序正在运行,该函数就会在计时器上每 2
这是我的代码。 #include #include #include #include #include #define MAX_LENGTH 8 #define WIDGET_NUM 3
我正在使用 Glade 制作 GUI 并使用 GTK 编写其代码。我制作了一个 GUI,这样如果单击“开始”按钮,不同参数的值就会开始显示在 Gtk 标签中。我已经为所有参数创建了函数,并且正在调用“
我正在学习 GTK+,这个简单的应用程序每次运行时都会崩溃。 它在主窗口中创建一个标签,每次单击按钮(key_press_event)标签和标题都应该交换。 如果我在 change_title 函数中
我是一名优秀的程序员,十分优秀!