2012-03-18 28 views
2

我想知道是否有方法在Qt應用程序中使用Cocoa API。用Qt Creator和Cocoa編程(複製當前應用程序中的選定文本)

我已經使用Windows API從活動應用程序中獲取選定的文本。 我想用mac os做同樣的事情。 我試圖用xCode製作一個簡單的「hello world」應用程序C++,其中包括<Cocoa/Cocoa.h>,但它沒有工作,因爲我除外。 有沒有辦法讓這個「你好單詞」應用程序與Cocoa一起構建?

而且,如果這是可能的,我可以通過Cocoa API從活動窗口中獲取選定的文本嗎?

編輯:

好,所以我成功地利用Cocoa.h,這要歸功於這個線程建立的東西:How to mix Qt, C++ and Obj-C/Cocoa

對於選擇問題,你可以檢查我發佈的答案,告訴你如何去做。

+0

我使用Qt與可可沒有任何問題);(如果問,我可以把代碼這樣做)

無論如何,感謝社會各界計算器。只需創建Qt應用程序並將obj-c文件添加到您的項目 – 2012-03-18 12:07:56

+0

我不確定我明白你的意思。我在.pro文件中嘗試了#include 和mac:LIBS + = -framework Cocoa。但我得到了9689個錯誤......而且我很困惑,當我運行一個優秀的Qt應用程序時,它會打開一個x11幀,這是正常的嗎?我認爲Mac OS不再使用x11。 – Aleks 2012-03-18 12:22:50

+0

如果你想在Cocoa中使用C++,你必須使用Objective-C++。你的實現文件必須使用'.mm'文件擴展名。我對Qt知之甚少,所以我無法幫助。 – 2012-03-18 12:56:11

回答

2

對於那些可能感興趣的人:我找到了一種獲取當前選定文本的方法。

只是通過模擬CMD + Ç

所以由於這種thread,我改變了代碼,以獲得由所述整數8表示的「C」鍵(在NSEvent.h實測值) ,所以這裏的代碼:

CGEventSourceRef source = CGEventSourceCreate(kCGEventSourceStateCombinedSessionState); 
CGEventRef saveCommandDown = CGEventCreateKeyboardEvent(source, (CGKeyCode)8, YES); 
CGEventSetFlags(saveCommandDown, kCGEventFlagMaskCommand); 
CGEventRef saveCommandUp = CGEventCreateKeyboardEvent(source, (CGKeyCode)8, NO); 

CGEventPost(kCGAnnotatedSessionEventTap, saveCommandDown); 
CGEventPost(kCGAnnotatedSessionEventTap, saveCommandUp); 

CFRelease(saveCommandUp); 
CFRelease(saveCommandDown); 
CFRelease(source); 

現在你只需要從Qt訪問剪貼板來獲得選擇。

相關問題