2011-07-14 10 views
3

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

私はすでにInfo.plistに必要な変更を加え、ブラウザに「customrprotocol:// etc」と入力するとアプリケーションを起動させます。問題は、URL全体を自分のアプリケーションに渡すための方法が必要なので、引数を処理できるようにすることです(アプリケーションの冒頭でのみ)。この段階では、私のカスタムURLプロトコルで長いURLをタイプしているにもかかわらず、Windowsの場合と同様に余分な引数(argv [1])が見つかりません。現時点で

は、私がこれを行うには、2つの潜在的な方法を検討してきました:)

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_SOURCES + = objectivecstuff.mmでプロジェクトに取り込む.mmファイルにすべてのobjective-cコードを投げました。また、Cocoaフレームワークもライブラリとして含めるようにしました。

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

問題の要点は、その.mmファイルの目的を理解していないと思っています。このEventHandlerオブジェクトなどをインスタンス化する必要があるかどうかはわかりません。私はhttp://el-tramo.be/blog/mixing-cocoa-and-qtを通して読んでみましたが、ココアをQtに統合したこの男の例は、C++指向であり、必要なものはURL scheme - Qt and macにありますので、このオプションをどのように進めるべきかはわかりません。

この時点でいくつかのアドバイスや提案をいただきありがとうございます。

ありがとうございます。

答えて

0

ココアでのAppleイベントを通じてURLを処理するためには、あなたは、いくつかのことを必要とする:

  • あなたはCFBundleURLTypesを使用してInfo.plistであなたのプロトコルを登録する必要があります。これは、アプリケーションが指定されたスキームを処理できることをLaunch Servicesに指示する方法です。 Launch Servicesは、システム上のすべてのアプリケーションを調べ、ファイルInfo.plistを読んで、大きなデータベースを作成します。あなたがする必要がある場合は、あなたのアプリケーションを再登録するlsregisterを使用することができますが、それは一般的によ;(それだけです。申し訳ありませんが、そのパスが長いので)あなたが

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

    を実行することにより、LSに見てどのように見ることができますそれを自動的に行います。

  • Qtを使用しているため、NSApplicationがあるとは思わないので、提供しているコードを実行するフックはありません。それで大丈夫です。あなたは本当にApple Eventに応えたいだけで、Cocoaを実行することはできません。 Nokiaにはdocs on thatが含まれています。うまくいけば、QFileOpenEventはCarbonを使わなくてもあなたの必要を満たすことができますが、もしそうならCarbonのこの部分は良いです(それはCarbonの他の部分のように推奨されていません)。 CarbonまたはQFileOpenEventを使用した場合のメリットは、Cでのすべての作業を行うことができることです。

+0

こんにちは、ありがとうございます。私は以前あなたがリンクした文書を見つけましたが、それはCarbonだったので私の状況には当てはまらないと考えました。現時点では、アプリケーションバンドルにセカンダリscript-as-application-bundleを含めることで10.6で動作する私の第1の方法を得ました。これはうまく動作します。私は自由な時間があるときにこの方法を働かせるために戻ってきます。ありがとうございました。 – user845351

関連する問題