如何在 Mac OS X 上获取拖放到应用程序二进制文件中的文件列表? [关闭]
Posted
技术标签:
【中文标题】如何在 Mac OS X 上获取拖放到应用程序二进制文件中的文件列表? [关闭]【英文标题】:How to get the list of files dragged and dropped onto an application binary file on Mac OS X? [closed] 【发布时间】:2014-01-14 14:39:27 【问题描述】:在 OS X 上,在某些文件上运行应用程序的常用方法是将它们放在 Finder 中的应用程序包中。我需要获取这些文件的列表。
我试图从命令参数中获取它们(如在 Windows 中),但命令行仅包含程序路径。
如何使用 Qt 5.2 或 Cocoa 框架获取此列表?
【问题讨论】:
你的意思是如何在main()
中获取命令行参数?
使用mac的人都应该清楚这个问题!!将文件拖放到应用程序可执行文件上的操作在 Windows 上可能并不常见。提名重新开放。
这确实是一个需要回答的好问题。向 Igor 和 Petesh 致敬。
@KubaOber:请注意,在我看来,至少有两到三个投票支持关闭的人是经验丰富的 Qt 开发人员。在“我试图从命令参数(如在 Windows 中)中获取它们,但命令行仅包含程序路径”中,这是一个不清楚的问题。 Fwiw,我仍然不明白那部分。
【参考方案1】:
要接受您的应用程序正在打开的文件,您需要为您的应用程序委托接受 openFile
调用,例如
- (BOOL)application:(NSApplication *)theApplication openFile:(NSString *)filename
NSLog(@"%@", filename);
return YES;
现在如果你想接受拖到窗口上的文件,你必须实现NSDraggingDestination
协议,这里有几个关于处理那个API的答案。
现在对于 Qt,您需要实现 event
处理程序,并处理 QEvent::FileOpen
事件,其参数是 QFileOpenEvent
例如
class MyApp : public QApplication
protected:
bool event(QEvent *);
;
bool
MyApp::event(QEvent *event)
switch (event->type())
case QEvent::FileOpen:
QFileOpenEvent *evt = static_cast<QFileOpenEvent *>(event));
// Do something with event->file() - the file that was opened
return true;
default:
return QApplication::event(event);
【讨论】:
这个问题(令人困惑地)用objective-c和qt标记... @***foe 确实如此,我必须在发布之前检查我的 Qt 实现 @Petesh:是的,我看到了,并立即撤回了我的反对票。谢谢关心。 @LaszloPapp:您可以编辑答案。它比整个downvote,nag,unvote hoopla的磨损要小得多。事实上,这就是为什么您可以编辑任何答案! @Kuba:那太粗鲁了。不是每个人都希望自己纠正这一点,如果他们有自己的意见就可以了。此外,否决票不仅是因为这一点。 ***foe 还有其他要点。这里没有受到伤害。另外,如果读者也吸取教训会更好,所以我不认为这是一个“喧嚣”。评论也可以稍后删除。看,在你来之前没有争论过。 :) 实际上,我很高兴 Petesh 愿意改进事情,而不是许多回答者非常糟糕地接受这些建议。以上是关于如何在 Mac OS X 上获取拖放到应用程序二进制文件中的文件列表? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章