gpt4 book ai didi

cocoa - 使用 Qt 为 Cocoa Mac 定制 URL 协议(protocol)

转载 作者:行者123 更新时间:2023-12-03 16:22:35 47 4
gpt4 key购买 nike

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

我已经对 Info.plist 进行了必要的更改,并在浏览器中输入“customrprotocol://etc”时启动应用程序。问题是我需要某种方法将整个 URL 传递到我的应用程序中,以便我可以处理参数(仅在应用程序的开头)。在此阶段,尽管使用我的自定义 URL 协议(protocol)输入了长 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 中的示例看起来比 URL scheme - Qt and mac 中找到的必要内容更加面向 C++。 ,所以我不确定如何继续使用此选项。

此时非常感谢您提供一些意见和建议!

感谢您的阅读。

最佳答案

为了使用 Cocoa 通过 Apple Events 处理 URL,您需要一些东西:

  • 您需要使用 CFBundleURLTypesInfo.plist 中注册您的协议(protocol)。这是您告诉 Launch Services 您的应用程序能够处理给定方案的方式。 Launch Services 会浏览系统上的所有应用程序,读取它们的 Info.plist 文件,并创建它们的大型数据库。你可以通过运行

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

    (抱歉,它的路径太长了;事实确实如此。)如果需要,您可以使用 lsregister 重新注册您的应用,但它通常会自动完成。

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

关于cocoa - 使用 Qt 为 Cocoa Mac 定制 URL 协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6701192/

47 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com