使用Qt的Cocoa Mac的自定义URL协议

时间:2011-07-14 23:33:35

标签: cocoa qt macos custom-url

我正在尝试使用自定义URL协议来启动我的Qt(4.7.3)应用程序。我已经让它适用于Windows,所以现在是Mac的时候了。

我已经对Info.plist进行了必要的更改,并在浏览器中输入“customrprotocol:// etc”时启动应用程序。问题是我需要一些方法将整个URL传递给我的应用程序,以便我可以处理参数(仅在应用程序的开头)。在这个阶段,尽管使用我的自定义URL协议输入了长URL,但在Windows中没有找到额外的参数(argv [1])。

目前,我已经调查了两种可能的方法:

1)制作一个苹果脚本,我将其变成一个应用程序包,我修改了.plist以响应customprotocol://,然后只需使用'do shell script'启动我的真实应用程序并将URL作为论点。 http://www.macosxautomation.com/applescript/linktrigger/index.html解释了这一过程。

不确定我是否喜欢这个选项,因为此时您基本上有2个应用程序包,我不想在某人的Mac上放置两个不同的应用程序来实现此功能。我正在尝试将一个捆绑放在另一个捆绑中以查看它是否有效。

2)通过将objective-c合并到我的项目中来处理实际的'geturl'AppleEvent,我试图通过以下示例来做:URL scheme - Qt and mac

我对这个选项的问题是我不太确定如何去做;我把所有的objective-c代码抛到一个.mm文件中,我用OBJECTIVE_SOURCES + = objectivecstuff.mm把它带到项目中,我确保将Cocoa框架也包含在库中。

一切都编译得很好,但它根本不做我想做的事情(我还尝试将URL放入链接示例的'handleGetURLEvent'方法中的全局变量中,以便我可以在不同的模块中处理它) 。

我认为问题的症结在于我不理解.mm文件中的objective-c并且不确定我是否需要在某处实例化此EventHandler对象或其他任何内容。我试过阅读http://el-tramo.be/blog/mixing-cocoa-and-qt,但是这个人将Cocoa集成到Qt的例子看起来更像是面向C ++,然后看起来是URL scheme - Qt and mac中发现的必要内容,所以我不知道如何继续这个选项。

此时非常感谢一些建议和建议!

感谢您的阅读。

1 个答案:

答案 0 :(得分:0)

为了使用Cocoa通过Apple Events处理URL,您需要做一些事情:

  • 您需要使用Info.plistCFBundleURLTypes中注册协议。这就是您告诉Launch Services您的应用程序能够处理给定方案的方法。启动服务查看系统上的所有应用程序,读取其Info.plist文件,并创建一个大型数据库。你可以通过运行

    来看看你对LS的看法
    /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -dump
    

    (抱歉它的路径很长;它只是。)如果需要,您可以使用lsregister重新注册您的应用,但它通常会自动执行。

  • 由于你使用的是Qt,我不相信你有NSApplication,所以没有一个钩子来运行你提供的代码。没关系。你真的只想回应Apple Event,而不是运行Cocoa。诺基亚包括docs on that。希望QFileOpenEvent能够满足您的需求,而不必使用碳,但如果您这样做,那么这部分碳就可以了(它不像碳的其他部分那样被弃用)。使用Carbon或QFileOpenEvent的好处是你可以用C完成所有工作。