簡體   English   中英

C中的Gtk + 3.無法在回調函數中正確轉換

[英]Gtk+ 3 in C. Can't cast properly in callback function

好吧,我基本上是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);

謝謝你的幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM