我有一个要求输入值的文本框。如何捕获此值并将其传递给另一个函数?
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);
}
现在我想使用这个值并将其传递给某个函数。
答案 0 :(得分: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 ... */
}
答案 1 :(得分:1)
作为旁注,如果你想要的只是一个数值,你最好首先使用GtkSpinButton。那么你就不必经历转换字符串的麻烦了。现在,用户仍然可以输入任何文本,并可能搞砸你的程序。
您可以使用
轻松创建SpinButtonGtkWidget *sbutton = gtk_spin_button_new_with_range(<minimum>, <maximum>, <step>);
然后连接到“value-changed”信号。然后用
提取值gdouble value = gtk_spin_button_get_value(GTK_SPIN_BUTTON(sbutton));