0

値を求めるテキストボックスがあります。この値をキャプチャして別の関数に渡すにはどうすればよいですか?

int main (int argc, char *argv[]) {
  GtkWidget *window,*table,*label,*entry;
  gtk_init(&argc, &argv);

  //Create the main window
  window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
  initialize_window(window);

   /* Create a 1x2 table */
   table = gtk_table_new (1, 2, TRUE);
   gtk_container_add (GTK_CONTAINER (window), table);

  /* create a new label. */
  label = gtk_label_new ("Enter some text:" );
  //gtk_misc_set_alignment (GTK_MISC (label), 0, 0);
  gtk_table_set_homogeneous(GTK_TABLE (table), TRUE);
  gtk_table_attach_defaults (GTK_TABLE (table), label, 1, 2, 0, 1);

  //create a text box
  //  entry = gtk_entry_new ();
  gtk_entry_set_max_length (GTK_ENTRY (entry),0);
  gtk_table_attach_defaults (GTK_TABLE (table), entry, 0, 1, 0, 1);
  gtk_widget_show_all(window);
}

今、この値を使用して、関数に渡したいと思います。

4

2 に答える 2

2

このようなものがうまくいくはずです。Enterキーが押されると、次のentry_activatedように呼び出されます。

static void entry_activated(GtkEntry *entry, gpointer user_data)
{
    int i;
    const gchar *entered = gtk_entry_get_text(entry);

    i = atoi(entered); // strtol() would be better, but this will work.

    g_message("Entry: %d", i);
}

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

    entry = gtk_entry_new();
    g_signal_connect(G_OBJECT(entry), "activate", G_CALLBACK(entry_activated), NULL);

    /* ... stuff ... */
}
于 2012-07-18T18:27:11.137 に答える
1

余談ですが、数値だけが必要な場合は、最初に GtkSpinButton を使用することをお勧めします。そうすれば、文字列を変換する手間を省くことができます。現状では、ユーザーは任意のテキストを入力でき、プログラムを台無しにする可能性があります。

SpinButton を簡単に作成できます

GtkWidget *sbutton = gtk_spin_button_new_with_range(<minimum>, <maximum>, <step>);

次に、「値が変更された」信号に接続します。次に、値を抽出するだけです

gdouble value = gtk_spin_button_get_value(GTK_SPIN_BUTTON(sbutton));
于 2012-07-20T14:54:31.503 に答える