3

カスタム URL プロトコルを使用して Qt (4.7.3) アプリケーションを起動しようとしています。すでに Windows で動作するようになったので、今度は Mac の番です。

Info.plist に必要な変更を既に行っており、ブラウザーで「customrprotocol://etc」と入力するとアプリケーションが起動されます。問題は、引数を処理できるように (アプリケーションの開始時のみ)、その URL 全体をアプリケーションに渡す何らかの方法が必要なことです。この段階では、カスタム URL プロトコルで長い URL を入力しても、Windows のように余分な引数 (argv[1]) は見つかりません。

現時点では、これを行うための 2 つの潜在的な方法を調査しました。

1) customprotocol:// に応答するように .plist を変更するアプリケーション バンドルに変換する Apple スクリプトを作成し、「do shell script」を使用して実際のアプリケーションを起動し、URL を引数として渡すだけです。http://www.macosxautomation.com/applescript/linktrigger/index.htmlでこのプロセスについて説明しています。

その時点で基本的に 2 つのアプリケーション バンドルがあり、これが機能するために誰かの Mac に 2 つの異なるアプリケーションを配置する必要がないため、このオプションが気に入るかどうかはわかりません。あるバンドルを別のバンドルに入れて、機能するかどうかを試しています。

2) object-c をプロジェクトに組み込んで、実際の 'geturl' AppleEvent を処理します。これは、次の例に従って実行しようとしました: URL スキーム - Qt and mac

このオプションに関する私の問題は、どうすればよいかよくわからないことです。すべての Objective-C コードを .mm ファイルに入れ、OBJECTIVE_SOURCES += Objectivecstuff.mm でプロジェクトに取り込み、Cocoa フレームワークもライブラリとして含めるようにします。

すべてが正常にコンパイルされますが、やりたいことを実行しません (さらに、リンクされた例の 'handleGetURLEvent' メソッドで URL をグローバル変数にスローして、別のモジュールで処理できるようにします)。

問題の核心は、その.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.plistを使用してプロトコルを登録する必要がありますCFBundleURLTypes。これは、アプリケーションが特定のスキームを処理できることを Launch Services に伝える方法です。Launch Services は、システム上のすべてのアプリケーションを調べてInfo.plistファイルを読み取り、それらの大きなデータベースを作成します。実行すると、LS にどのように見えるかを確認できます

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

    必要に応じてを使用lsregisterしてアプリを再登録できますが、通常は自動的に行われます。

  • あなたは Qt を使用しているNSApplicationので、. それで大丈夫です。Cocoa を実行するのではなく、Apple イベントに応答したかっただけです。Nokia には、そのドキュメントが含まれています。うまくいけばQFileOpenEvent、Carbon を使用しなくてもニーズを満たすことができますが、そうする場合、Carbon のこの部分は問題ありません (Carbon の他の部分のように非推奨ではありません)。Carbon またはを使用QFileOpenEventする利点は、すべての作業を C で実行できることです。

于 2011-07-15T00:10:56.400 に答える