2012-02-07 304 views
1

我們正在開發一個C++ Qt應用程序,用於從外部應用程序中複製所選文本和/或圖像,並對其進行修改並粘貼回來。由於我們在Mac上,我們正在使用Objective-C來完成這一部分。從NSPasteboard複製和粘貼文本+圖片

我們在嘗試從粘貼板中獲取圖片時遇到問題。它適用於文本,但我們不確定如何處理圖像或文本+圖像的組合。 由於我們不知道用戶可能選擇什麼,因此我們應該能夠執行通用的粘貼板內容檢索以修改它並將其放回到粘貼板中。

我們試試這個:

//we thought about retrieving some generic item from pasteboard, using NSPasteboardItem 
NSArray *classes = [[NSArray alloc] initWithObjects:[NSPasteboardItem class], nil]; 
NSDictionary *options = [NSDictionary dictionary]; 
NSArray *auxArray = [[NSPasteboard generalPasteboard] readObjectsForClasses:classes options:options]; 
NSData *archived_data = [auxArray objectAtIndex:0]; 

我們處理文本的解決方案是:

NSString *text = [[NSPasteoard generalPasteboard] stringForType:NSStringPboardType]; 
string text_str = string([text UTF8String]); 

它沒有工作,那麼,我們怎樣才能從剪貼板用戶選擇? 我們需要獲取原始字節或rtf內容,以便根據需要對其進行修改,然後將其放回到粘貼板並粘貼回原來的用戶選擇。

謝謝!

+0

「我們是在C++的Qt工作applciation從外部應用程序拷貝選定的文本和/或圖像,修改它,然後將其粘貼回。由於我們是在Mac,我們正在用Objective-C來完成這部分。「請閱讀llmd如何複製來自外部應用程序的選定文本和/或圖像。謝謝。 nnagornyi(AT)aol.com – 2012-04-14 10:01:39

回答

0

我覺得這個功能將幫助您

- (IBAction)paste:sender 
{ 
    NSPasteboard *pasteboard = [NSPasteboard generalPasteboard]; 
    NSArray *classArray = [NSArray arrayWithObject:[NSImage class]]; 
    NSDictionary *options = [NSDictionary dictionary]; 
    BOOL ok = [pasteboard canReadObjectForClasses:classArray options:options]; 
    if (ok) 
    { 
     NSArray *objectsToPaste = [pasteboard readObjectsForClasses:classArray options:options]; 
     NSImage *image = [objectsToPaste objectAtIndex:0]; 
     [imageView setImage:image]; 
    } 
}