如何正确替换 GtkEntry 的值

How to replace the value of GtkEntry properly

内部处理程序 clearHandlereplaceHandle 我正在尝试使用 gtk_entry_set_text 函数替换 GtkEntry 的值,但它对我不起作用。

这是我做的

#include <gtk/gtk.h>

void clearHandle(GtkEntry *e)
{
    gtk_entry_set_text(e, "");
}

void replaceHandle(GtkEntry *e)
{
    gtk_entry_set_text(e, "Hello World");
}

static void activate(GtkApplication *app, gpointer user_data)
{
    GtkWidget *window;
    GtkWidget *button_box;
    GtkWidget *text_box;
    GtkWidget *clearButton;
    GtkWidget *replaceButton;
    GtkWidget *textInputBox;

    window = gtk_application_window_new(app);
    gtk_window_set_title(GTK_WINDOW(window), "First GUI in c");
    gtk_window_set_default_size(GTK_WINDOW(window), 600, 600);

    // Containers and adding them to the window
    button_box = gtk_button_box_new(GTK_ORIENTATION_VERTICAL);
    text_box = gtk_fixed_new();

    // Textbox inside container
    textInputBox = gtk_entry_new();
    gtk_entry_set_text((GtkEntry *)textInputBox, "Hello boom World");

    clearButton = gtk_button_new_with_label("Clear");
    replaceButton = gtk_button_new_with_label("Replace with hello World");

    gtk_container_add(GTK_CONTAINER(button_box), textInputBox);
    gtk_container_add(GTK_CONTAINER(button_box), clearButton);
    gtk_container_add(GTK_CONTAINER(button_box), replaceButton);

    g_signal_connect(clearButton, "clicked", G_CALLBACK(clearHandle), (GtkEntry *)textInputBox);
    g_signal_connect(replaceButton, "clicked", G_CALLBACK(replaceHandle), (GtkEntry *)textInputBox);

    gtk_container_add(GTK_CONTAINER(window), button_box);

    gtk_widget_show_all(window);
}


int main(int argc, char **argv)
{
    GtkApplication *app;
    int status;

    app = gtk_application_new("org.yk.dev", G_APPLICATION_FLAGS_NONE);
    g_signal_connect(app, "activate", G_CALLBACK(activate), NULL);
    status = g_application_run(G_APPLICATION(app), argc, argv);
    g_object_unref(app);

    return status;
}


虽然 运行 我在终端中遇到以下错误

(main:14233): Gtk-CRITICAL **: 06:08:43.524: gtk_entry_set_text: assertion 'GTK_IS_ENTRY (entry)' failed

(main:14233): Gtk-CRITICAL **: 06:08:44.188: gtk_entry_set_text: assertion 'GTK_IS_ENTRY (entry)' failed


The clicked signal 给出两个参数:第一个是被点击的 GtkButton * 然后是 用户数据指针。您的回调需要将 GtkButton * 作为第一个参数(即使您不使用它);目前它试图使用按钮作为入口,这就是为什么你得到“'GTK_IS_ENTRY (entry)' 失败”。