如何在Mac OS X上将文件列表拖放到应用程序二进制文件中?

时间:2014-01-14 14:39:27

标签: objective-c macos cocoa qt

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

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

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

1 个答案:

答案 0 :(得分:3)

要接受使用您的应用程序打开的文件,您需要接受针对您的应用程序代表的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);
    }
}