[英]GTK/Glade text entry string to global variable in C
我正在使用 C 语言中的 Glade 和 GTK 为游戏创建菜单 GUI。我有一个文本输入框和一个按钮。 当按钮被按下时,文本条目内的值需要保存为全局变量。 我不知道如何获取文本条目中的值,所以我有点卡住了。 任何帮助都会很棒。
功能
void on_okButton_clicked (GtkButton *object, gpointer user_data)
{
//???????
}
编辑:
这就是我当前的代码的样子
#include <stdio.h>
#include <gtk/gtk.h>
#include <python2.7/Python.h>
void on_window1_destroy (GtkObject *object, gpointer user_data)
{
gtk_main_quit();
}
void on_okButton_clicked (GtkButton *object, gpointer user_data)
{
gchar *entry_value;//this can be a global variable, too, of course
entry_value = gtk_entry_get_text(//get text function
GTK_ENTRY(//use GTK_ENTRY widget
(GtkWidget *) user_data //cast to GtkWidget pointer
)
);
}
int main(int argc, char *argv[])
{
GtkBuilder *gtkBuilder;
GtkWidget *window;
GtkWidget *Quit;
GtkWidget *OK;
GtkWidget *entry = gtk_entry_new();
gtk_init(&argc, &argv);
gtkBuilder = gtk_builder_new();
gtk_builder_add_from_file(gtkBuilder, "IPenter.glade", NULL);
window = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "window1"));
OK = GTK_WIDGET(gtk_builder_get_object(gtkBuilder, "okButton"));
g_signal_connect(G_OBJECT(OK),"clicked",G_CALLBACK(on_okButton_clicked),entry);
g_object_unref(G_OBJECT(gtkBuilder));
gtk_widget_show(window);
gtk_main();
return 0;
}
假设您正确连接了信号,这应该可以正常工作:
gchar *entry_value;//this can be a global variable, too, of course
entry_value = gtk_entry_get_text(//get text function
GTK_ENTRY(//use GTK_ENTRY widget
(GtkWidget *) user_data //cast to GtkWidget pointer
)
);
可以肯定的是,这是您连接信号的方式:
g_signal_connect(
G_OBJECT(your_btn),
"clicked",
G_CALLBACK(
on_okButton_clicked
),
txt_entry_pointer
);
其中txt_entry_pointer
当然是指向入口小部件的指针。 但是,不要犯在此处传递本地指针地址这一令人惊讶的常见错误。 如果您像这样创建条目小部件:
GtkWidget *entry = gtk_entry_new();
然后尝试像这样连接信号:
g_signal_connect(
G_OBJECT(your_btn),
"clicked",
G_CALLBACK(
on_okButton_clicked
),
&entry// <=== WRONG!!
);
您正在传递一个指向堆栈指针的指针,很可能会导致未定义的行为。 只需从上面的代码中删除&符号即可。
另外值得一提的是gchar
只是char
类型的 typedef。 这意味着:
gchar *foobar;
和写作一样
char *foobar;
正如你在这里看到的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.