2012-02-07 298 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]; 
    } 
}