如何在 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 上获取拖放到应用程序二进制文件中的文件列表? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 OS X 上拖放到 (python) 脚本上?

在 Mac OS X 上使用 JTable 进行拖放

如何确定是不是在 Mac OS X 上剥离了二进制文件?

如何在mac OS X下安装Mongodb

如何在 Mac OS X 上安装 MySQL gem

为啥OSX 不能在“Macintosh HD”上安装,Mac OS X 讨论区