-1

gtk エントリ ウィジェットからテキストを取得し、それを整数値に変換するにはどうすればよいですか。私のコードには、ウィジェットへのポインターを含む Window というラッパー構造体が含まれていることに注意してください。メインでは、Window のインスタンスを宣言してから、適切な GTK 関数呼び出しを使用して正しいウィジェットを構築します。次に、そのウィンドウ オブジェクトを、クリックされたアクションを処理する関数に渡します。次に、分子を分母で割った整数形式を計算したいと思います。以下は私の試みです。button_clicked 関数を除いて、すべてのコードが機能します。何か案は?

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

struct Window
{
    GtkWidget *numerator;
    GtkWidget *denominator;
    GtkWidget *button;
    GtkWidget *label;
};


void button_clicked(GtkWidget *widget, gpointer data)
{
    Window* w = (Window*)data;
    char buf[10];

    char buffer[200];

    GtkEntry* e = (GtkEntry*)w->numerator;
    const gchar* entry1 = gtk_entry_get_text(e);

    char* test = (char*)gchar;
    int r = atoi(test);


    sprintf(buf,"%d",r);

    GtkWidget *label = w->label;
    gtk_label_set_text(GTK_LABEL(label), buf);
}


int main(int argc, char*argv[])
{
    GtkWidget *window;
    GtkWidget *table;
    Window w;


    //Set up my window
    gtk_init(&argc,&argv);
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title(GTK_WINDOW(window), "Division");
    gtk_window_set_default_size(GTK_WINDOW(window),500,500);
    gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);

    //Create my table and add it to the window
    table = gtk_table_new(4,2,FALSE);
    gtk_container_add(GTK_CONTAINER(window),table);

    //Create instances of all my widgets
    w.numerator = gtk_entry_new();
    w.denominator = gtk_entry_new();
    w.button = gtk_button_new_with_label("Click");
    w.label = gtk_label_new("result");

    //Attack the widgets to the table
    gtk_table_attach(GTK_TABLE(table), w.numerator,0,1,0,1,GTK_FILL,GTK_FILL,5,5);
    gtk_table_attach(GTK_TABLE(table), w.denominator,0,1,1,2,GTK_FILL,GTK_FILL,5,5);
    gtk_table_attach(GTK_TABLE(table), w.button,0,1,2,3,GTK_FILL,GTK_FILL,5,5);
    gtk_table_attach(GTK_TABLE(table), w.label,0,1,3,4,GTK_FILL,GTK_FILL,5,5);

    //attach the click action to with the button to invoke the button_clicked function
    g_signal_connect(G_OBJECT(w.button),"clicked",G_CALLBACK(button_clicked),&w);   
      g_signal_connect_swapped(G_OBJECT(window),"destroy",G_CALLBACK(gtk_main_quit),NULL);

    gtk_widget_show_all(window);


    gtk_main();

    return 0;
}
4

1 に答える 1

5

私がこれを正しく見れば、あなたの「テストコード」であなたがしようとしているのは、ラベル文字列を「w->分子」の内容に設定することだけですよね?

この線

char* test = (char*)gchar;

私には怪しく見え、コンパイルさえしません。タイプミスのようです。「gchar」を「entry1」に変更すると、希望どおりに動作するはずです。

ただし、 GtkEntryの代わりに GtkSpinButton を使用することをお勧めします。これは、数値用に作成されたカスタム エントリのようなもので、数値の取得は何倍も簡単です。

于 2012-09-04T13:18:55.390 に答える