我正在为我的程序编写一个UI,使用opengl和SDL,结合Lua和C++
我现在需要的是一些库,它将允许我调用一个函数,该函数向用户提供用于打开/保存文件的文件选择对话框。但是,如果操作系统为这样的对话框提供了本机功能,那么我想使用该对话框(例如Window的GetOpenFileName)。
我唯一需要支持的平台是Windows和Linux,但我希望仍然能够使用大部分SDL&我已经编写了openGL代码。
有哪些选项?
tinyfledialogs提供了许多模式对话框和弹出通知(用于图形和控制台模式)。它是一个跨平台的单个C文件(+头),可以添加到您的C或C++项目中。它的目标是非常易于使用,没有init,没有主循环,也没有外部依赖关系。它被GitHub上的数百个项目使用,当然,我是作者。在这里获取:http://tinyfiledialogs.sourceforge.net
用法示例:
char const * selection = tinyfd_openFileDialog( // there is also a wchar_t version
"Select file", // title
"C:\", // optional initial directory
2, // number of filter patterns
lFilterPatterns, // char const * lFilterPatterns[2] = { "*.txt", "*.jpg" };
NULL, // optional filter description
0 // forbid multiple selections
);
tinyfiledialogs将字符字符串处理为UTF-8(在windows和unix上)。在Windows上,它还提供UTF-16/wchar_t功能。
***v3.10(2023):新的FORTRAN模块通过示例***完全实现
***v3.13(2023):新PASCAL单元完全实现,示例***
您应该好好看看Native File Dialog。它是一个小型、可移植的C库,允许您以跨平台的方式使用加载和保存对话框,而无需链接qt或wxWidgets等巨大的依赖项。
我是作者,我在Linux、Mac和Windows上使用SDL2和OpenGL。
https://github.com/mlabbe/nativefiledialog
在我看来,wxWidgets是开源、久经考验、成熟、跨平台、跨语言、免费、开源、GUI库。除了wxWidgets,还有许多其他这样的跨平台库,例如:
- Tk
- FLTK
- 狐狸
- XUL
- AbiWord的跨平台层
等等。
你很可能会在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
Windows版本确实使用了GetOpenFileName()
。
当然,正如Andre在否决一个有效的替代答案时指出的那样,正如你已经知道的,还有Qt。请参阅raj的回答以获取链接。
https://doc.qt.io/qt-5/qfiledialog.html提供了操作系统文件开放服务的良好抽象
我使用了另一个好的库:
https://github.com/samhocevar/portable-file-dialogs
它是一个支持Linux/Mac/Windows 的单头库
我为本机对话框开发了自己的C库。它适用于Windows、macOS和Linux,并提供各种对话框。如果你正是在寻找它的话,它应该能胜任这项工作。单击此处查看存储库。