c - C 中的 Gtk+ 3。无法在回调函数中正确转换

标签 c gtk signals

好吧,我基本上是 Gtk 的新手,我正在将一个结构作为参数发送到回调函数,该回调函数将在用户单击按钮时启动。当我尝试获取它的值时,它没有正确填充它们,我不知道为什么。

计数器数据结构如下:

typedef struct{
  int flag;
  GtkWidget* textview;
  GtkWidget* label;
  gchar* test;

} Counter_data;

我调用的函数是这样的:

static void start_counter(GtkWidget *btn, gpointer data){
  int counter = 59;
  gchar* tiempo;
  g_print("starting/restarting counter\n");
  gtk_button_set_label((GtkButton*)btn, "Started counting");
  while(gtk_events_pending()) gtk_main_iteration();
  while(1){
    sleep(1);
    tiempo = get_minutes(counter++);
    g_print(tiempo);
    g_print("%d\n",((Counter_data*) data)->flag);
    /* gtk_label_set_text((GtkLabel* )((Counter_data*) data)->label, "testing2"); */
    while(gtk_events_pending()) gtk_main_iteration();
  }
}

在我的主要过程中,我把这个:

  Counter_data counter_data;
  window = gtk_application_window_new (app);
  gtk_window_set_title (GTK_WINDOW (window), "Pomodoro 0.1");
  gtk_window_set_default_size (GTK_WINDOW (window), ((Screen_size *) user_data)->x, ((Screen_size *) user_data)->y );
  parentBox = gtk_box_new(FALSE, 0);
  btn_box = gtk_button_box_new(GTK_ORIENTATION_HORIZONTAL);
  textview = gtk_text_view_new();
  label_time = gtk_label_new(NULL);

  counter_data.flag = 0; //we are just starting the counter.
  counter_data.textview = textview;
  counter_data.label = label_time;
  counter_data.test = "testing...";
  gtk_box_pack_start(GTK_BOX(parentBox), btn_box, TRUE, TRUE, 0);
  gtk_box_pack_start(GTK_BOX(parentBox), textview, TRUE, TRUE, 0);
  gtk_box_pack_start(GTK_BOX(parentBox), label_time, TRUE, TRUE, 0);

  btn = gtk_button_new_with_label("Start counting");
  g_signal_connect(btn, "clicked", G_CALLBACK(start_counter),&counter_data);

当我在控制台打印标志的值时

g_print("%d\n",((Counter_data*) data)->flag);

它打印垃圾或地址,我不再确定了。我的 linter 说一切都很好 :S

最佳答案

谢谢你的帮助,问题是我没有用malloc分配空间

  Counter_data *counter_data = malloc(sizeof *counter_data);

谢谢大家的帮助!

关于c - C 中的 Gtk+ 3。无法在回调函数中正确转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41836032/

相关文章:

c++ - GTK+ : passing data with g_signal_connect not working

c - 如何在 C 中阻止信号?

c++ - 将字符数组拆分为两个字符数组

c - 警告 : implicit declaration of function — why does my code work anyway?

c - 访问其他大小的 32 位字数组

在 C : RPN interpreter 中将字符串的数字成员(char 类型)转换为 int 类型

c - 检测 GTK 文本缓冲区中的光标移动

g++ - g++ 编译期间未声明 GTK_OBJECT

bash - 具体来说,当您在终端中按下 Ctrl-C 时会发生什么?

qt - 我可以为多个信号设置一个插槽吗?