我试图创建一个对话框,当用户从组合框中选择一个特定的条目时,它会弹出一个对话框,记录用户的输入并做出相应的反应。
这是我目前的代码:

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_条目获取输入,并对该函数执行字符串比较。
当按下按钮时,G U打印行运行。
谢谢

最佳答案

首先,这绝对是add_new_set()的错误签名。它不仅没有遵循GtkDialog::response的正确签名,而且还将GtkWidget作为参数传递。你永远不应该有GtkWidget本身,总是GtkWidget *(指向GtkWidget的指针)。
aGtkDialog::response的正确签名是given in the documentation

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

其次,您需要一种直接或间接地通过entry传入user_data的方法,因此g_signal_connect_swapped()是错误的。改为使用g_signal_connect(),最后一个参数变成user_data
最后,从gtkentry中获取文本的函数显然被调用了gtk_entry_get_text()。返回的指针仅在信号处理程序本身中有效;如果以后要访问它,您需要复制它,但出于您的需要,您不需要复制它。
祝你好运。

关于c - 对话框中的gtk_entry,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33044572/

10-12 22:04