gpt4 book ai didi

macos - 在 Qt/Cocoa 中获取 AppleEvent

转载 作者:行者123 更新时间:2023-12-03 18:00:08 24 4
gpt4 key购买 nike

我有一些 Qt 4.4/Carbon 代码,可以很好地获取 Mac OS X 文档打开事件(例如,用户双击与应用程序关联的文档):

#ifdef Q_OS_MACX
#include <Carbon/Carbon.h>
#endif

MyApplication::MyApplication( int& argc, char** argv )
:QApplication( argc, argv )
{
#ifdef Q_OS_MACX
AEInstallEventHandler( kCoreEventClass, kAEOpenDocuments,
TPApplication::appleEventHandler, 0, false );
#endif
}

MyApplication::~MyApplication()
{
#ifdef Q_OS_MACX
AERemoveEventHandler( kCoreEventClass, kAEOpenDocuments,
TPApplication::appleEventHandler, false );
#endif
}

#ifdef Q_OS_MACX
OSErr
TPApplication::appleEventHandler( const AppleEvent* ae, AppleEvent*, long )
{
// process events
}
#endif

我想将此代码移植到 Qt 4.7/Cocoa。是否仍然可以从基于 Cocoa 的 Qt 应用程序调用此代码,或者我是否必须调用 Cocoa API?或者是否有更优雅的方法来拦截用户双击与应用程序关联的文档,而不需要特定于平台的代码?

最佳答案

我也遇到了同样的问题。我不确定,但我认为它确实有效。但从不同的侧面来看一下。为什么要保留遗留代码? Carbon API 不是 64 位。迁移此代码应该不难(检查 NSAppleEventManager)。

这是您的注册方式:

NSAppleEventManager *appleEventManager = [NSAppleEventManager sharedAppleEventManager];
[appleEventManager setEventHandler:self
andSelector:@selector(handleEvent:withReplyEvent:)
forEventClass:kCoreEventClass
andEventID:kAEOpenDocuments];

这就是方法

  • (void)handleEvent:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor *)replyEvent{}

请记住,您必须将 Cocoa 代码导出到另一个文件(最好是 .mm),但您仍然可以在该文件中使用 C++/Qt 代码,没有任何问题。

关于macos - 在 Qt/Cocoa 中获取 AppleEvent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7892669/

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