在Linux中编写的C++简单打开文件对话框

10

我想知道是否有人能够帮助我在Ubuntu中使用C++实现一个简单的文件打开对话框。我正在使用OpenGL作为我的GUI,但我希望用户在程序加载时能够选择文件。我尝试过gtkmm和wxWidgets,但它们似乎对我想要做的事情来说太复杂了。


1
gtkmm和wxWidgets都带有预制的文件选择器对话框。有比这更简单的吗?它们在哪些方面对您来说太复杂了? - us2012
我的意思是,OpenGL 和 GTK 都需要它们自己的主循环同时运行,而我不知道如何将它们两个集成起来。谢谢您的回复。 - user2805119
为什么要“同时”呢?你说你需要在程序加载时选择一个文件,理论上你甚至可以为文件选择器创建一个独立的gtkmm程序,然后将文件名作为命令行参数传递给你的OpenGL应用程序。 - us2012
哦,我的意思是用户应该能够在程序启动时或在使用过程中的任何时间加载文件。但这是有道理的。 - user2805119
1
最简单的方法:在 zenity --file-selection 上使用 popen() - Dummy00001
4个回答

9

如果你只需要选择一个文件,那么启动一个单独的程序来完成这个任务。就像评论中@Dummy00001所说的那样,您可以启动zenity --file-selection作为子进程并读取其标准输出。

char filename[1024];
FILE *f = popen("zenity --file-selection", "r");
fgets(filename, 1024, f);

或者您也可以自己编写程序来完成任务。这样,您可以根据自己的需要定制用户界面。


1
我为此编写了osdialog。请参见osdialog_gtk2.c,其中包含使用GTK+ 2的示例。

1

0

这里有更完整的带有zenity的代码:

const char zenityP[] = "/usr/bin/zenity";
char Call[2048];

sprintf(Call,"%s  --file-selection --modal --title=\"%s\" ", zenityP, "Select file");

FILE *f = popen(Call,"r");
fgets(Bufor, size, f); 

int ret=pclose(f);
if(ret<0) perror("file_name_dialog()");

return ret==0;//return true if all is OK

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接