Получение AppleEvent в Qt / Какао - PullRequest
0 голосов
/ 25 октября 2011

У меня есть некоторый код 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 / Какао.Можно ли по-прежнему вызывать этот код из приложения Qt, основанного на какао, или вместо этого мне нужно вызывать API-интерфейс какао?Или есть более элегантный способ перехвата пользователем двойного щелчка по документу, связанному с приложением, без кода конкретной платформы?

1 Ответ

1 голос
/ 26 октября 2011

У меня была такая же проблема. Я не уверен, но я думаю, что это сработало. Но взгляните на это с другой стороны. Зачем хранить устаревший код? Carbon API не является 64-битным. Миграция этого кода не должна быть сложной (проверьте NSAppleEventManager).

Вот как вы регистрируетесь:

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

А это метод

  • (void) handleEvent: (NSAppleEventDescriptor *) событие withReplyEvent: (NSAppleEventDescriptor *) replyEvent { }

Помните, что вам придется экспортировать код Какао в другой файл (лучше всего .mm), но вы все равно можете без проблем использовать свой код C ++ / Qt внутри этого файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...