跨平台本机打开/保存文件对话框

Pon*_*dle 15 c++ user-interface dialog cross-platform native

我正在为我的程序编写一个UI,使用opengl和SDL结合使用Lua和C++

我现在需要的是一些库,它允许我调用一个函数,向用户显示用于打开/保存文件的文件选择对话框.但是如果操作系统为这样的对话提供了本机功能,那么我想使用该对话框(例如Window的GetOpenFileName).

我需要支持的唯一平台是Windows和Linux,但我希望能够仍然使用我已编写的大部分SDL和openGL代码.

有哪些选择?

Mic*_*bbé 24

你应该好好看看Native File Dialog.它是一个小型的可移植C库,允许您以跨平台的方式使用加载和保存对话框,而无需链接qt或wxWidgets等巨大的依赖项.

我是作者,我在Linux,Mac和Windows上使用SDL2和OpenGL.

https://github.com/mlabbe/nativefiledialog

  • 哇,看起来很棒.Win/OSX/Linux和gcc/clang/VS支持,UTF-8,没有其他依赖关系,最重要的是,友好的*Zlib*许可证?难以置信! (2认同)

tin*_*ogs 14

tinyfiledialogs提供了许多模态对话框和弹出通知(包括图形和控制台模式).它是一个跨平台的C文件(+标题),可以添加到您的C或C++项目中.它的目的是非常容易使用,没有INIT,没有主循环,没有包含和没有链接.它被github上的数百个项目使用,当然,我是作者.

  • 它是一个 zlib 许可证(许可证位于源文件和头文件的顶部)。 (2认同)
  • 虽然我不会,但我觉得有必要投反对票,只是因为你的 SoureForge 链接指向这里进行烦人且无耻的投票耕作,而不是简单地提供代码。因此,我将继续寻找替代方案,并对上述答案投赞成票。 (2认同)

rid*_*rid 7

在我看来,wxWidgets的开源的,战斗测试,成熟的,跨平台,跨语言,免费,开源的GUI库.除了wxWidgets之外,还有许多其他此类跨平台库,例如:

... 和更多.

您很可能会在AbiWord源代码中找到您正在寻找的内容.在src目录中查找"FileOpen":

./af/xap/cocoa/xap_CocoaDlg_FileOpenSaveAs.cpp
./af/xap/cocoa/xap_CocoaDlg_FileOpenSaveAs.h
./af/xap/cocoa/xap_CocoaFileOpen_Views.nib
./af/xap/cocoa/xap_CocoaFileOpen_Views.nib/classes.nib
./af/xap/cocoa/xap_CocoaFileOpen_Views.nib/info.nib
./af/xap/cocoa/xap_CocoaFileOpen_Views.nib/keyedobjects.nib
./af/xap/gtk/xap_UnixDlg_FileOpenSaveAs.cpp
./af/xap/gtk/xap_UnixDlg_FileOpenSaveAs.h
./af/xap/win/xap_Win32Dlg_FileOpenSaveAs.cpp
./af/xap/win/xap_Win32Dlg_FileOpenSaveAs.h
./af/xap/xp/xap_Dlg_FileOpenSaveAs.cpp
./af/xap/xp/xap_Dlg_FileOpenSaveAs.h
Run Code Online (Sandbox Code Playgroud)

Windows版确实使用GetOpenFileName().


当然,正如安德烈在指出有效的替代答案时指出的那样,也有Qt,正如你已经知道的那样.请参阅raj的答案以获取链接.

  • 你忘记了Qt,这可以说是开源战斗测试成熟,... GUI库. (13认同)

par*_*mar 5

http://doc.qt.nokia.com/latest/qfiledialog.html提供了os文件打开服务的良好抽象

  • 不一定是真的.自Qt 4.something它有LGPL许可证.这基本上意味着您可以在商业产品中动态链接Qt. (4认同)