gpt4 book ai didi

c - 从 GTK 中的 G_CALLBACK 返回文件名

转载 作者:行者123 更新时间:2023-11-30 15:35:42 25 4
gpt4 key购买 nike

嘿伙计们,我想从函数(或指针)返回文件名的值,但我不知道该怎么做。我的文件名存储文件名/home/用户名/文件的路径。这是我的主要内容

gchar *filename = NULL;

button = GTK_WIDGET( gtk_builder_get_object( builder, "button1" ) );
g_signal_connect (button, "clicked", G_CALLBACK (show_dialog), &filename);

显示对话框如下所示

static void
show_dialog ( GtkWidget *button,
gint response_id,
gpointer user_data )
/* Init filechoosedialog, builder etc */
{

gchar *filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (filechoosedialog));

}

我需要将 static void show_dialog 更改为 gchar show_dialog 吗?最后我需要返回文件名吗?由于出现编译错误,我还需要声明什么

 warning: return makes integer from pointer without a cast 

所以我想将这样的代码添加到我的主文件中并获取文件名的值

if filename != NULL
g_print ("Selected filename: %s\n", filename);

最佳答案

这听起来像是对事件驱动编程的误解。您不会在 main() 中执行此类操作,而是在事件处理程序中执行此操作。在您的示例中,您将从 show_dialog() 调用 g_print()

如果您想做一些更复杂的事情,您需要了解一些应用程序状态:这就是 g_signal_connect() 用户数据指针的用途。例如,如果要将文件名设置为标签文本,则可以将指向标签的指针设置为用户数据指针,然后可以在事件处理程序中设置标签文本。

更一般地说,用户数据指针可以是任何内容:例如可用于存储文件名字符串的数据结构。典型用法是在 main 中分配的应用程序数据结构:该结构包含所有“应用程序全局”变量(如文件名),并向所有 GTK+ 回调提供指向该结构的指针,以便所有函数都可以访问和修改该结构内容。/p>

如果问题出在使用用户数据指针,下面是一个仅使用指向文件名的指针作为用户数据的示例:

g_signal_connect (button, "clicked", G_CALLBACK (button_clicked_cb), &filename);

static void
button_clicked_cb (GtkWidget *button,
gint response_id,
gpointer user_data)
{
char **filename_ptr = (char**)user_data;
*filename_ptr = g_strdup ("newly allocated string that the filename pointer in main() stack will now point to");
}

关于c - 从 GTK 中的 G_CALLBACK 返回文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22837977/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com