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

cross platform native open/save file dialogs

本文关键字:保存文件 对话框 本机 跨平台      更新时间:2023-10-16

我正在为我的程序编写一个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,并提供各种对话框。如果你正是在寻找它的话,它应该能胜任这项工作。单击此处查看存储库。