2011-07-14 46 views
3

我試圖使用自定義URL協議來啓動我的Qt(4.7.3)應用程序。我已經在Windows上工作了,所以現在是Mac的時候了。與Qt的可可Mac的自定義URL協議

我已經對Info.plist進行了必要的更改,並且在瀏覽器中輸入'customrprotocol:// etc'時啓動應用程序。問題是我需要某種方式將整個URL傳遞到我的應用程序中,以便我可以處理參數(僅在應用程序的開始處)。在這個階段沒有額外的參數(argv [1])在Windows中找到,儘管用我的自定義URL協議輸入了長URL。

目前,我已經研究了兩種可能的方式來做到這一點:

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-C代碼拋入了一個.mm文件,我用OBJECTIVE_SOURCES + = objectivecstuff.mm帶入了這個項目,並且確保將Cocoa框架也包含在一個庫中。

一切都很好,但它不會做我想做的事(我另外嘗試將URL放入鏈接示例的'handleGetURLEvent'方法中的全局變量中,以便我可以在不同的模塊中處理它)。

我認爲問題的癥結在於我不理解該.mm文件中的objective-c,並且不確定是否需要在某處實例化此EventHandler對象或其他任何東西。我試過通過http://el-tramo.be/blog/mixing-cocoa-and-qt閱讀,但這傢伙將Cocoa集成到Qt中的例子看起來更像C++,因此看起來似乎是URL scheme - Qt and mac中必需的東西,所以我不確定如何繼續使用此選項。

真的很感謝在這一點上的一些意見和建議!

謝謝您的閱讀。

回答

0

爲了通過蘋果事件與可可處理的URL,你需要幾件事情:

  • 你需要使用CFBundleURLTypes註冊您的協議Info.plist。這就是你如何告訴啓動服務你的應用程序能夠處理給定的方案。啓動服務將查看系統上的所有應用程序,讀取它們的文件,並創建它們的大型數據庫。你可以看到如何通過運行

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

    看LS(對不起它的路徑是如此之長,它只是爲。)您可以使用lsregister重新註冊您的應用程序,如果你需要,但它通常會自動執行。

  • 由於您使用Qt,我不相信您有NSApplication,所以沒有運行您提供的代碼的鉤子。沒關係。你真的只是想回應蘋果事件,而不是運行可可。諾基亞包括docs on that。希望QFileOpenEvent將滿足您的需要,而不必使用碳,但如果你這樣做,碳的這部分是好的(它不像碳的其他部分不推薦使用)。使用Carbon或QFileOpenEvent的好處是你可以用C做所有工作。

+0

Hi Rob,感謝您的快速回復。我以前發現你鏈接到的文件,但是因爲它是Carbon,所以它不適用於我的情況,所以我感謝你通知我。目前,我已經通過將第二個腳本作爲應用程序包包含到我的應用程序包中,從而獲得了第一種方法來處理10.6。當我有一些空閒時間時,我會回來嘗試使這種方法有效。謝謝。 – user845351