скопируйте и вставьте текст + изображение из NSPasteboard - PullRequest
1 голос
/ 07 февраля 2012

мы работаем над приложением C ++ Qt, которое копирует выделенный текст и / или изображения из внешних приложений, изменяет его и затем вставляет обратно. Поскольку мы находимся на Mac, мы делаем эту часть с Objective-C.

У нас возникают проблемы при попытке получить изображение из картона. Он отлично работает для текста, но мы не уверены, как обращаться с изображениями или сочетанием текста + изображения. Поскольку мы не знаем, что может выбрать пользователь, мы должны быть в состоянии выполнить общий поиск содержимого монтажной панели, чтобы изменить его и вернуть обратно в монтажную область.

Мы попробовали это:

//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, чтобы изменить его так, как нам нужно, а затем положить его обратно в монтажную панель и вставить обратно, заменяя исходный выбор пользователя.

Спасибо!

1 Ответ

0 голосов
/ 28 декабря 2016

Я думаю, что эта функция поможет вам

 - (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];
    }
}
...