【问题标题】:How to get the list of files dragged and dropped onto an application binary file on Mac OS X? [closed]如何在 Mac OS X 上获取拖放到应用程序二进制文件中的文件列表? [关闭]
【发布时间】:2014-01-14 14:39:27
【问题描述】:

在 OS X 上,在某些文件上运行应用程序的常用方法是将它们放在 Finder 中的应用程序包中。我需要获取这些文件的列表。

我试图从命令参数中获取它们(如在 Windows 中),但命令行仅包含程序路径。

如何使用 Qt 5.2 或 Cocoa 框架获取此列表?

【问题讨论】:

  • 你的意思是如何在main()中获取命令行参数?
  • 使用mac的人都应该清楚这个问题!!将文件拖放到应用程序可执行文件上的操作在 Windows 上可能并不常见。提名重新开放。
  • 这确实是一个需要回答的好问题。向 Igor 和 Petesh 致敬。
  • @KubaOber:请注意,在我看来,至少有两到三个投票支持关闭的人是经验丰富的 Qt 开发人员。在“我试图从命令参数(如在 Windows 中)中获取它们,但命令行仅包含程序路径”中,这是一个不清楚的问题。 Fwiw,我仍然不明白那部分。

标签: objective-c macos cocoa qt


【解决方案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标记...
  • @trojanfoe 确实如此,我必须在发布之前检查我的 Qt 实现
  • @Petesh:是的,我看到了,并立即撤回了我的反对票。谢谢关心。
  • @LaszloPapp:您可以编辑答案。它比整个downvote,nag,unvote hoopla的磨损要小得多。事实上,这就是为什么您可以编辑任何答案!
  • @Kuba:那太粗鲁了。不是每个人都希望自己纠正这一点,如果他们有自己的意见就可以了。此外,否决票不仅是因为这一点。 trojanfoe 还有其他要点。这里没有受到伤害。另外,如果读者也吸取教训会更好,所以我不认为这是一个“喧嚣”。评论也可以稍后删除。看,在你来之前没有争论过。 :) 实际上,我很高兴 Petesh 愿意改进事情,而不是许多回答者非常糟糕地接受这些建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-14
  • 2012-05-16
  • 2010-12-29
相关资源
最近更新 更多