gtk_entry 来自对话框

gtk_entry from a dialog

我正在尝试创建一个当用户从组合框中选择特定条目时弹出的对话框,它应该记录用户输入并做出相应的反应。

到目前为止,这是我的代码:

void add_new_set(GtkWidget entry)
{
  g_print("howdy\n");
}

GtkWidget * dialog = gtk_dialog_new_with_buttons("Message",container,GTK_DIALOG_DESTROY_WITH_PARENT,"OK", GTK_RESPONSE_NONE,NULL);
    GtkWidget * content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog));
    GtkWidget * entry = gtk_entry_new();
    gtk_container_add(GTK_CONTAINER(content_area), entry);
    g_signal_connect_swapped (dialog,"response",G_CALLBACK (add_new_set),dialog);
    gtk_window_set_modal (GTK_WINDOW(dialog), TRUE);
    gtk_widget_show_all (dialog);

我需要在按下 OK 按钮时从 gtk_entry 获取输入,并对该函数执行字符串比较。 g_print 行在按下按钮时运行。

谢谢

首先,add_new_set() 的签名绝对是错误的。它不仅没有遵循 GtkDialog::response 的正确签名,而且还传递了 GtkWidget 作为参数。你永远不应该单独拥有 GtkWidget,总是 GtkWidget *(指向 GtkWidget 的指针)。

GtkDialog::response 的正确签名是 given in the documentation:

void
user_function (GtkDialog *dialog,
               gint       response_id,
               gpointer   user_data)

其次,您需要一种通过 user_data 直接或间接传递 entry 的方法,因此 g_signal_connect_swapped() 是错误的。使用 g_signal_connect() 代替;最后一个参数变成 user_data.

最后,调用了从 GtkEntry 中获取文本的函数,很明显,gtk_entry_get_text()。返回的指针仅在信号处理程序本身有效;如果您想稍后访问它,您将需要复制它,但根据您的需要,您不需要。

祝你好运。