Linux gtk+&引用;捕获;函数的值 #包括 #包括 #包括 int-mcd(); 静态void num1(GtkWidget*entry1) { 常量gchar*输入文本; entry_text=gtk_entry_get_text(gtk_entry(entry1)); } 静态void num2(GtkWidget*entry2) { 常量gchar*输入文本; entry_text=gtk_entry_get_text(gtk_entry(entry2)); } //这是一个很好的大学,我是“加州大学”的学生! 静态无效回调(GtkWidget*小部件, gpointer数据) { INTA、b、c; a=22; b=12; c=mcd(a,b); g_打印(“%d\n”,c); } 内部mcd(内部x,内部y){ 如果(y==0){ 返回x; } 否则返回mcd(y,x%y); } //魁 int main(int argc,char*argv[]){ GtkWidget*窗口; GtkWidget*表; GtkWidget*标签1; GtkWidget*标签2; GtkWidget*入口1; GtkWidget*入口2; GtkWidget*按钮; gtk_init(&argc,&argv); 窗口=gtk_窗口_新建(gtk_窗口_顶层); gtk_窗口设置位置(gtk_窗口(窗口)、gtk_WIN_位置中心); gtk_窗口设置标题(gtk_窗口(窗口),“MCD计算器”); gtk_容器_设置_边框_宽度(gtk_容器(窗口),10); 表=gtk_表_新(3,2,假); gtk_容器添加(gtk_容器(窗口),表格); 标签1=gtk_标签_新(“Num1:”); 标签2=gtk_标签_新(“Num2:”); gtk|U表附(gtk|U表(表),标签1,0,1,0,1,gtk|U填充| gtk|U收缩,gtk|U填充| gtk|U收缩,5,5); gtk|U表附(gtk|U表(表),标签2,0,1,1,2,gtk|U填充| gtk|U收缩,gtk|U填充| gtk|U收缩,5,5); entry1=gtk_entry_new(); g_信号连接(g_对象(entry1),“激活”,g_回调(num1),&entry1); entry2=gtk_entry_new(); g_信号连接(g_对象(entry2),“激活”,g_回调(num2),&entry2); gtk|U表附(gtk|U表(表),入口1,1,2,0,1,gtk|U填充| gtk|U收缩,gtk|U填充| gtk|U收缩,5,5); gtk|U表附(gtk|U表(表),入口2,1,2,gtk|U填充| gtk|U收缩,gtk|U填充| gtk|U收缩,5,5); /*脉动钙可乐*/ 按钮=gtk_按钮新按钮,带有标签(“Calcola”); gtk_容器添加(gtk_容器(窗口),按钮); gtk|U表格附件(gtk|U表格,按钮,1,5,7,8,gtk|U填充| gtk|U展开,gtk|U填充| gtk|U展开,0,0); g_信号连接(按钮“点击”,g_回调(回调),(gpointer)“Calcola”); /*细粉状碳酸钙*/ gtk_小部件_全部显示(窗口); g_信号连接(窗口,“销毁”,g_回调(gtk_主退出),空); gtk_main(); 返回退出成功; }

Linux gtk+&引用;捕获;函数的值 #包括 #包括 #包括 int-mcd(); 静态void num1(GtkWidget*entry1) { 常量gchar*输入文本; entry_text=gtk_entry_get_text(gtk_entry(entry1)); } 静态void num2(GtkWidget*entry2) { 常量gchar*输入文本; entry_text=gtk_entry_get_text(gtk_entry(entry2)); } //这是一个很好的大学,我是“加州大学”的学生! 静态无效回调(GtkWidget*小部件, gpointer数据) { INTA、b、c; a=22; b=12; c=mcd(a,b); g_打印(“%d\n”,c); } 内部mcd(内部x,内部y){ 如果(y==0){ 返回x; } 否则返回mcd(y,x%y); } //魁 int main(int argc,char*argv[]){ GtkWidget*窗口; GtkWidget*表; GtkWidget*标签1; GtkWidget*标签2; GtkWidget*入口1; GtkWidget*入口2; GtkWidget*按钮; gtk_init(&argc,&argv); 窗口=gtk_窗口_新建(gtk_窗口_顶层); gtk_窗口设置位置(gtk_窗口(窗口)、gtk_WIN_位置中心); gtk_窗口设置标题(gtk_窗口(窗口),“MCD计算器”); gtk_容器_设置_边框_宽度(gtk_容器(窗口),10); 表=gtk_表_新(3,2,假); gtk_容器添加(gtk_容器(窗口),表格); 标签1=gtk_标签_新(“Num1:”); 标签2=gtk_标签_新(“Num2:”); gtk|U表附(gtk|U表(表),标签1,0,1,0,1,gtk|U填充| gtk|U收缩,gtk|U填充| gtk|U收缩,5,5); gtk|U表附(gtk|U表(表),标签2,0,1,1,2,gtk|U填充| gtk|U收缩,gtk|U填充| gtk|U收缩,5,5); entry1=gtk_entry_new(); g_信号连接(g_对象(entry1),“激活”,g_回调(num1),&entry1); entry2=gtk_entry_new(); g_信号连接(g_对象(entry2),“激活”,g_回调(num2),&entry2); gtk|U表附(gtk|U表(表),入口1,1,2,0,1,gtk|U填充| gtk|U收缩,gtk|U填充| gtk|U收缩,5,5); gtk|U表附(gtk|U表(表),入口2,1,2,gtk|U填充| gtk|U收缩,gtk|U填充| gtk|U收缩,5,5); /*脉动钙可乐*/ 按钮=gtk_按钮新按钮,带有标签(“Calcola”); gtk_容器添加(gtk_容器(窗口),按钮); gtk|U表格附件(gtk|U表格,按钮,1,5,7,8,gtk|U填充| gtk|U展开,gtk|U填充| gtk|U展开,0,0); g_信号连接(按钮“点击”,g_回调(回调),(gpointer)“Calcola”); /*细粉状碳酸钙*/ gtk_小部件_全部显示(窗口); g_信号连接(窗口,“销毁”,g_回调(gtk_主退出),空); gtk_main(); 返回退出成功; },linux,gtk,Linux,Gtk,我不知道如何从“entry\u text”和“entry\u text\u 1”中获取数字,并将它们用于回调函数。(因此它将变成:a=输入文本;b=输入文本1)您是否正在尝试访问按钮的回调函数中两个GtkEntrys的文本?如果是这样,您需要将对两者的引用传递给按钮的信号处理程序 首先,改变这一行: #include <stdio.h> #include <stdlib.h> #include <gtk/gtk.h> int mcd(); static v

我不知道如何从“entry\u text”和“entry\u text\u 1”中获取数字,并将它们用于回调函数。(因此它将变成:a=输入文本;b=输入文本1)

您是否正在尝试访问按钮的
回调函数中两个
GtkEntry
s的文本?如果是这样,您需要将对两者的引用传递给按钮的信号处理程序

首先,改变这一行:

#include <stdio.h>
#include <stdlib.h>
#include <gtk/gtk.h>

int mcd();

static void num1( GtkWidget *entry1)
{
    const gchar* entry_text;
    entry_text = gtk_entry_get_text(GTK_ENTRY (entry1));
}

static void num2( GtkWidget *entry2)
{
    const gchar* entry_text;
    entry_text = gtk_entry_get_text(GTK_ENTRY (entry2));
}

//DA QUI...ho collegato il pulsante "Calcola" con la funzione MCD!
static void callback( GtkWidget *widget,
                      gpointer   data)
{
    int a,b,c;
    a=22;
    b=12;
    c=mcd(a,b);
    g_print("%d\n", c);
}

int mcd(int x, int y){
        if(y==0){
        return x;
        }
    else return mcd(y, x%y);
}
//A QUI

int main(int argc, char *argv[]) {

  GtkWidget *window;
  GtkWidget *table;

  GtkWidget *label1;
  GtkWidget *label2;

  GtkWidget *entry1;
  GtkWidget *entry2;

  GtkWidget *button;

  gtk_init(&argc, &argv);

  window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
  gtk_window_set_title(GTK_WINDOW(window), "MCD Calculator");
  gtk_container_set_border_width(GTK_CONTAINER(window), 10);

  table = gtk_table_new(3, 2, FALSE);
  gtk_container_add(GTK_CONTAINER(window), table);

  label1 = gtk_label_new("Num1:");
  label2 = gtk_label_new("Num2:");


  gtk_table_attach(GTK_TABLE(table), label1, 0, 1, 0, 1, GTK_FILL | GTK_SHRINK, GTK_FILL | GTK_SHRINK, 5, 5);
  gtk_table_attach(GTK_TABLE(table), label2, 0, 1, 1, 2, GTK_FILL | GTK_SHRINK, GTK_FILL | GTK_SHRINK, 5, 5);

  entry1 = gtk_entry_new();
  g_signal_connect(G_OBJECT(entry1), "activate", G_CALLBACK(num1), &entry1);
  entry2 = gtk_entry_new();
  g_signal_connect(G_OBJECT(entry2), "activate", G_CALLBACK(num2), &entry2);

  gtk_table_attach(GTK_TABLE(table), entry1, 1, 2, 0, 1, GTK_FILL | GTK_SHRINK, GTK_FILL | GTK_SHRINK, 5, 5);
  gtk_table_attach(GTK_TABLE(table), entry2, 1, 2, 1, 2, GTK_FILL | GTK_SHRINK, GTK_FILL | GTK_SHRINK, 5, 5);


   /*Pulsante calcola*/
   button = gtk_button_new_with_label ("Calcola");
   gtk_container_add (GTK_CONTAINER (window), button);
   gtk_table_attach (GTK_TABLE (table), button, 1, 5, 7, 8, GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 0, 0);
   g_signal_connect (button, "clicked", G_CALLBACK (callback), (gpointer) "Calcola");
   /*Fine pulsante calcola*/

  gtk_widget_show_all(window);

  g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);

  gtk_main();

  return EXIT_SUCCESS;
}
为此:

g_signal_connect (button, "clicked", G_CALLBACK (callback), (gpointer) "Calcola");
然后,在
回调
函数中:

GtkWidget *entries[2] = { entry1, entry 2};
g_signal_connect (button, "clicked", G_CALLBACK (callback), entries);

我有一个错误,错误:无法转换为指针类型
static void callback( GtkWidget *widget,
                  gpointer   data)
{
  GtkWidget *entries = data;
  int a,b,c;
  a=atoi(gtk_entry_get_text(GTK_ENTRY(entries[0])));
  b=atoi(gtk_entry_get_text(GTK_ENTRY(entries[1])));
  c=mcd(a,b);
  g_print("%d\n", c);
}