من دارم یه برنامه ماشین حساب می نویسم یه گیر اساسی پیدا کردم من الان برای دوتا دکمه تابع callback نوشتم و یک شی و یک مقدار رو با استفاده از struct به callback فرستادم اما الان تابع void hi(GtkWidget *widget,gpointer data) موندم می خوام هر دکمه که فشار داده میشه کارکتر مربوط به اون تو entry نوشته بشه ولی الان نمی دونم چه کدی بنویسم که برای هر دکمه b1->num=”n” رو بفرسته برنامه رو کامپایل و اجرا کنید خودتون متوجه می شید مشکل من کجاست
#include <gtk/gtk.h>
#include <iostream>
#include <string>
#include <cctype>
struct hamid{
GtkWidget *entry;
const gchar *num;
}*b1;
void hi(GtkWidget *widget,gpointer data){
gtk_entry_set_text(GTK_ENTRY(b1->entry),b1->num);
}
int main(int argc,char *argv[]){
gtk_init(&argc,&argv);
GtkWidget *window;
GtkWidget *table;
GtkWidget *button1;
GtkWidget *button2;
GtkWidget *button3;
GtkWidget *button4;
GtkWidget *button5;
GtkWidget *button6;
GtkWidget *button7;
GtkWidget *button8;
GtkWidget *button9;
GtkWidget *button10;
GtkWidget *button11;
GtkWidget *button12;
GtkWidget *button13;
GtkWidget *button14;
GtkWidget *button15;
GtkWidget *button16;
window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
table=gtk_table_new(5,4,TRUE);
b1=(hamid*)g_malloc(sizeof(hamid));
b1->entry=gtk_entry_new();
b1->num="1";
button1=gtk_button_new_with_label("1");
button2=gtk_button_new_with_label("2");
button3=gtk_button_new_with_label("3");
button4=gtk_button_new_with_label("4");
button5=gtk_button_new_with_label("5");
button6=gtk_button_new_with_label("6");
button7=gtk_button_new_with_label("7");
button8=gtk_button_new_with_label("8");
button9=gtk_button_new_with_label("9");
button10=gtk_button_new_with_label("0");
button11=gtk_button_new_with_label("=");
button12=gtk_button_new_with_label("+");
button13=gtk_button_new_with_label("-");
button14=gtk_button_new_with_label("/");
button15=gtk_button_new_with_label("*");
button16=gtk_button_new_with_label(".");
gtk_window_set_resizable(GTK_WINDOW(window),FALSE) ;
gtk_container_add(GTK_CONTAINER(window),table);
gtk_table_attach_defaults(GTK_TABLE(table),b1->entry,1,3,0,1);
gtk_table_attach_defaults(GTK_TABLE(table),button1 ,0,1,1,2);
gtk_table_attach_defaults(GTK_TABLE(table),button2 ,1,2,1,2);
gtk_table_attach_defaults(GTK_TABLE(table),button3 ,2,3,1,2);
gtk_table_attach_defaults(GTK_TABLE(table),button4 ,3,4,1,2);
gtk_table_attach_defaults(GTK_TABLE(table),button5 ,0,1,2,3);
gtk_table_attach_defaults(GTK_TABLE(table),button6 ,1,2,2,3);
gtk_table_attach_defaults(GTK_TABLE(table),button7 ,2,3,2,3);
gtk_table_attach_defaults(GTK_TABLE(table),button8 ,3,4,2,3);
gtk_table_attach_defaults(GTK_TABLE(table),button9 ,0,1,3,4);
gtk_table_attach_defaults(GTK_TABLE(table),button1 0,1,2,3,4);
gtk_table_attach_defaults(GTK_TABLE(table),button1 1,2,3,3,4);
gtk_table_attach_defaults(GTK_TABLE(table),button1 2,3,4,3,4);
gtk_table_attach_defaults(GTK_TABLE(table),button1 3,0,1,4,5);
gtk_table_attach_defaults(GTK_TABLE(table),button1 4,1,2,4,5);
gtk_table_attach_defaults(GTK_TABLE(table),button1 5,2,3,4,5);
gtk_table_attach_defaults(GTK_TABLE(table),button1 6,3,4,4,5);
g_signal_connect(G_OBJECT(button1),"clicked",G_CAL LBACK(hi),(gpointer)b1);
b1->num="2";
g_signal_connect(G_OBJECT(button2),"clicked",G_CAL LBACK(hi),(gpointer)b1);
gtk_widget_show(window);
gtk_widget_show(table);
gtk_widget_show(button1);
gtk_widget_show(button2);
gtk_widget_show(button3);
gtk_widget_show(button4);
gtk_widget_show(button5);
gtk_widget_show(button6);
gtk_widget_show(button7);
gtk_widget_show(button8);
gtk_widget_show(button9);
gtk_widget_show(button10);
gtk_widget_show(button11);
gtk_widget_show(button12);
gtk_widget_show(button13);
gtk_widget_show(button14);
gtk_widget_show(button15);
gtk_widget_show(button16);
gtk_widget_show(b1->entry);
gtk_main();
return 0;
}