настраиваемый протокол URL для Cocoa Mac с Qt - PullRequest
3 голосов
/ 15 июля 2011

Я пытаюсь использовать собственный протокол URL для запуска моего приложения Qt (4.7.3).У меня уже есть это работает для Windows, так что теперь пришло время для Mac.

Я уже внес необходимые изменения в Info.plist, и приложение запускается при входе в customrprotocol: // и т. д. в браузере.Проблема в том, что мне нужен какой-то способ передачи всего URL в мое приложение, чтобы я мог обработать аргументы (только в начале приложения).На данном этапе дополнительный аргумент (argv [1]) не найден, как в Windows, несмотря на ввод длинных URL-адресов с моим пользовательским протоколом URL-адресов.

На данный момент я исследовал два возможных способа сделать это:

1) Создайте сценарий apple, который я превращаю в пакет приложений, чей .plist я изменяю для ответа на customprotocol: //, и который просто запускает мое реальное приложение с помощью «do shell script» и передаетURL в качестве аргумента.http://www.macosxautomation.com/applescript/linktrigger/index.html объясняет этот процесс.

Не уверен, что мне нравится эта опция, поскольку у вас на данный момент есть 2 пакета приложений, и я не хочу размещать два разных приложения на чужом Macчтобы это работало.Я экспериментирую с размещением одного комплекта в другом, чтобы увидеть, работает ли он.

2) Обработайте фактический 'geturl' AppleEvent, включив в мой проект target-c, что я попытался сделать, следуя этомупример: Схема URL - Qt и mac .

Моя проблема с этим параметром в том, что я не совсем уверен, как это сделать;Я бросил весь кодjective-c в файл .mm, который я привел в проект с помощью OBJECTIVE_SOURCES + =jectivecstuff.mm, и я обязательно включил инфраструктуру Cocoa в качестве библиотеки.

Все отлично компилируется, но просто не выполняет то, что я хочу (я дополнительно пытаюсь бросить URL-адрес в глобальную переменную в методе handleGetURLEvent связанного примера, чтобы обработать его вдругой модуль).

Я думаю, суть проблемы в том, что я не понимаю цель-c в этом файле .mm и не уверен, нужно ли мне где-то создавать экземпляр этого объекта EventHandler или что-то еще.Я попытался прочитать http://el -tramo.be / blog / Mixing-Cocoa-and-qt , но пример этого парня по интеграции Какао в Qt выглядит гораздо более ориентированным на C ++, чем то, что кажетсянеобходимые вещи найдены в схеме URL - Qt и mac , поэтому я не уверен, как действовать с этой опцией.

Буду очень признателен за некоторые советы и предложения на этом этапе!

Спасибо за чтение.

1 Ответ

0 голосов
/ 15 июля 2011

Чтобы обрабатывать URL-адреса через Apple Events с Cocoa, вам нужно несколько вещей:

  • Вам необходимо зарегистрировать свой протокол в Info.plist, используя CFBundleURLTypes.Вот как вы сообщаете Launch Services, что ваше приложение способно обрабатывать данную схему.Launch Services просматривает все приложения в системе, считывает их Info.plist файлы и создает из них большую базу данных.Вы можете увидеть, как вы смотрите на LS, запустив

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

    (извините, его путь такой длинный; он просто есть.) Вы можете использовать lsregister для повторной регистрации приложения, если вам нужно, нокак правило, это делается автоматически.

  • Поскольку вы используете Qt, я не верю, что у вас есть NSApplication, поэтому нет ловушки для запуска кода, который вы ''повторное предоставление.Это нормально.Вы действительно просто хотели отреагировать на событие Apple, а не запустить Какао.Nokia включает в себя документы на этот .Надеемся, что QFileOpenEvent удовлетворит ваши потребности без использования углерода, но если вы это сделаете, эта часть углерода хороша (она не считается устаревшей, как другие части углерода).Преимущество использования Carbon или QFileOpenEvent заключается в том, что вы можете выполнять всю свою работу в C.

...