我正試圖用GTK的c語言為樹莓派4制作UI。我想根據按鈕的點擊來改變不同部件的可見性,以模擬一個新的頁面。我已經嘗試了互聯網上的所有方法,但由于我不擅長編碼,我無法找出問題所在。 誰能幫幫我?
這個程式可以編譯,但是當我按下按鈕的時候,會出現錯誤 "在gtk_widget_show上斷言失敗",在widget hide上也是如此。此外,還出現了分段故障,程式崩潰了。
我正在使用 cmake 來編譯我的代碼。 我已經附上了錯誤的螢屏截圖。
#include <gtk/gtk.h>/span>
typedef struct AppData
{[/span>
GtkWidget *label1;
GtkWidget *label2;
} AppData;
static void button1 (gpointer data)
{
AppData *data2 = (AppData*)data;
gtk_widget_hide(data2->label1)。
gtk_widget_show(data2->label2)。
}
static void button2 ( gpointer data)
{
AppData *data2 = (AppData*)data;
gtk_widget_show(data2-> label1)。
gtk_widget_hide(data2->label2)。
}
int main(int argc, char *argv[])/span>
{
GtkWidget *window;
GtkWidget *fixed;
GtkWidget *btn1;
GtkWidget *btn2;
GtkWidget *box1;
GtkWidget *box2;
gtk_init(&argc, &argv);
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window), "ethercat test 1");
gtk_window_set_default_size(GTK_WINDOW(window), 1000,500) 。
fixed = gtk_fixed_new();
gtk_container_add(GTK_CONTAINER(window), fixed);
box1 = gtk_box_new(GTK_ORIENTATION_VERTICAL, 1) 。
gtk_fixed_put(GTK_FIXED(fixed), box1, 0,0) 。
box2 = gtk_box_new(GTK_ORIENTATION_VERTICAL, 1) 。
gtk_fixed_put(GTK_FIXED(fixed), box2, 100,100) 。
AppData *app_data = g_new0 (AppData, 2);
app_data->label1 = gtk_label_new("label1") 。
gtk_box_pack_start(GTK_BOX(box1),app_data->label1, TRUE,TRUE,0)。
app_data->label2 = gtk_label_new("label2") 。
gtk_box_pack_start(GTK_BOX(box2),app_data->label2, TRUE,TRUE,0)。
btn1 = gtk_button_new_with_label("ethercat 1")。
gtk_fixed_put(GTK_FIXED(fixed), btn1, 10, 450) 。
gtk_widget_set_size_request(btn1, 80,30)。
btn2 = gtk_button_new_with_label("ethercat 2")。
gtk_fixed_put(GTK_FIXED(fixed), btn2, 110, 450) 。
gtk_widget_set_size_request(btn2, 80,30)。
gtk_widget_show_all(window);
g_signal_connect(G_OBJECT(btn1), "clicked", G_CALLBACK(button1), app_data) 。
g_signal_connect(G_OBJECT(btn2), "clicked", G_CALLBACK(button2), app_data);
g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL)。
gtk_main()。
printf("program end
")。)
return(0)。
}
uj5u.com熱心網友回復:
你的 "clicked "回呼的函式簽名是錯誤的。它應該是檔案中描述的形式:
void on_clicked(
GtkButton* self,
gpointer user_data
)
因此,舉例來說,你的button2()函式變成了
static void button2 (GtkButton *btn2, gpointer data)
{
AppData *data2 = (AppData*)data;
gtk_widget_show(data2-> label1)。
gtk_widget_hide(data2->label2)。
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/315120.html
標籤:
下一篇:擴展遞回Typescript介面
