如何在OS X中使用C++打开一个“打开文件”对话框?

6
我正在开发一个使用OpenGL和C++的应用程序,它可以解析一些结构化的输入文件并以图形方式显示出来。我希望在应用程序加载时启动一个打开文件对话框,让用户选择要显示的文件。我在网上找不到需要的内容。在C++中是否有实现这一功能的方法?如果有,该如何实现?谢谢。

1
你使用哪个框架来显示OpenGL窗口?答案将取决于这个。你使用GLUT吗?或者其他的什么框架? - Yuji
1
谢谢您的回复。我确实在使用GLUT,但我有点担心这很重要。在Windows下,有一个Windows API调用来处理文件浏览。在代码中,它只是一个返回用户选择的文件路径的函数(但对话框由操作系统处理)。我希望在OS X中找到类似的东西。 - Lyudmil
3个回答

3

你有两个选择,一个快速的,一个好的:

  • 快速而相对简单,使用Carbon中的导航服务框架和NavCreateGetFileDialog()。你会很快完成,几乎不需要学习新知识,但你的代码将无法在64位上运行(这是苹果正在推广的),并且你必须链接Carbon框架。导航服务在64位中已被正式删除,并且在未来通常会被弃用(尽管我预计它会在32位中持续存在相当长的时间)。

  • 第一次需要更多的工作(因为你需要学习一些Objective-C),但更加强大且得到完全支持,将NSOpenPanel封装在一个Objective-C++类中,并将其暴露给你的C++。这是我的封装C++模式,只是反过来。如果你选择这种方式并遇到问题,请留言,我会尽快发布博客文章加以解决。


第二点中的两个链接都已失效。 - Fedor

3

补充Rob写的内容:

不幸的是,没有Windows的GetOpenFileName的简单等效。

  1. 如果您使用Carbon:我认为NavCreatGetFileDialog并不容易使用...您可以在CarbonDev中使用此代码来查看如何使用它。那里的代码返回CFURLRef。要获取POSIX路径,请使用CFURLGetFileSystemReprestnation

  2. 话虽如此,我建议您使用Cocoa。Rob将撰写一篇博客文章,介绍如何从GLUT使用NSOpenPanel :)


哈哈哈哈...实际上,再深入探索一下,苹果公司提供了一些很好的GLUT示例代码。对于这个问题最有用的是GLUTWindow,因为它提供了你运行一个sheet所需的对象句柄。苹果还有至少一篇关于使用GLUT的技术文章;值得在他们的网站上搜索更多内容。http://developer.apple.com/mac/library/samplecode/glut - Rob Napier
这应该是对Rob答案的评论。 - Fedor

0

在 macOS 上打开文件对话框的最佳方法可能是使用 AppKit 框架,它是 Cocoa API 的一部分。

您需要从 AppKit 中获取 NSOpenPanel 类,并创建适当的 Objective-C++ 包装以便从普通的 C++ 代码中使用它。对于没有太多 macOS 开发经验的人来说,这不是一项容易的任务。幸运的是,现在已经不必这样做了,因为已经可以在 GitHub 上找到现有的包装器。例如,请查看


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