繁体   English   中英

GTK/Glade 文本输入字符串到 C 中的全局变量

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM