首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GTK gtk_label_set_text分割故障

GTK gtk_label_set_text分割故障
EN

Stack Overflow用户
提问于 2012-08-23 11:53:50
回答 2查看 1.3K关注 0票数 0

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

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

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

代码语言:javascript
复制
#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 = 0xb6406608change_title() label = 0x807bda8)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-23 12:37:43

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

代码语言:javascript
复制
gboolean key_event_handler(GtkWidget *widget,GdkEventKey *event, gpointer data);

因此,简单地将您的函数更改为:

代码语言:javascript
复制
static gboolean change_title(GtkWidget *widget, GdkEventKey *event, GtkLabel *data)

而且它应该能工作。

票数 2
EN

Stack Overflow用户

发布于 2012-08-23 12:38:17

您的change_title函数有错误的原型。

有关正确的原型,请参见文献资料。大多数*-event信号将实际事件作为处理程序函数中的参数传递,因为处理程序通常需要检查事件才能执行。例如,这里的GdkEventKey事件将包含按下(或释放)哪个键的信息。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12090959

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档