3

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

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

目前,我已经研究了两种可能的方法来做到这一点:

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 方案 - Qt 和 mac,所以我不确定如何继续使用此选项。

在这一点上真的很感激一些建议和建议!

感谢您的阅读。

4

1 回答 1

0

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

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

    /System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -dump
    

    (抱歉,它的路径很长;它就是这样。)lsregister如果需要,您可以使用重新注册您的应用程序,但它通常会自动完成。

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

于 2011-07-15T00:10:56.400 回答