Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Ввод/Вывод, Сеть. Межпроцессное взаимодействие _ Копирование файла в буфер

Автор: Tereks 22.12.2009, 13:35

Кто-нибудь сталкивался с проблемой копирования файла в буфер? Не могу добиться нормального копирования (ну как в TotalCommander к примеру)
пробовал через

QFile readFile( "C:\file.txt" );
if ( !readFile.open( QIODevice::ReadOnly ) )
return;

QMimeData * md = new QMimeData();
md->setData( "file", readFile.readAll() );
QApplication::clipboard()->setMimeData( md );


но как-то не очень вышло ) Поделитесь знанием..

Автор: CrackedMind 22.12.2009, 13:57

Для начала надо бы

"C:\\file.txt"

Кто за тебя слэши экранировать будет?

Да и зачем полное содержимое файла в буфер пихать? Скопируй имя файла, а потом при вставке вызови QFile::copy....

Автор: Litkevich Yuriy 22.12.2009, 16:01

Цитата(CrackedMind @ 22.12.2009, 16:57) *
Да и зачем полное содержимое файла в буфер пихать?
согласен, ведь это может быть тяжёлый файл.

Автор: trdm 22.12.2009, 16:16

Цитата(Tereks @ 22.12.2009, 13:35) *
Кто-нибудь сталкивался с проблемой копирования файла в буфер? Не могу добиться нормального копирования (ну как в TotalCommander к примеру)
пробовал через
QFile readFile( "C:\file.txt" );
if ( !readFile.open( QIODevice::ReadOnly ) )
return;

QMimeData * md = new QMimeData();
md->setData( "file", readFile.readAll() );
QApplication::clipboard()->setMimeData( md );


но как-то не очень вышло ) Поделитесь знанием..

постановка задачи не полностью ясна. Копирование файла в буфер для чего? Вставка в другое место с пом. средство оболочки?
начни искать тут: http://www.rsdn.ru/article/winshell/shlext1.xml
+ при копировании файла в буфер в винде там сидят вот такие миме типы:
Цитата
QClipboard formats: application/x-qt-windows-mime;value="Shell IDList Array" / text/uri-list / application/x-qt-windows-mime;value="Preferred DropEffect" / application/x-qt-windows-mime;value="Shell Object Offsets" / application/x-qt-windows-mime;value="FileName" / application/x-qt-windows-mime;value="FileNameW"


получено:
    QClipboard* clipBrd = qApp->clipboard();
    if (clipBrd){
        const QMimeData* mime = clipBrd->mimeData();
        if (mime){
            toDebug =toDebug + QString("\n QClipboard formats: ") + mime->formats().join(" / ");
        }
    }

возможно эта инфа поможет.

Автор: Tereks 23.12.2009, 7:44

Так, со слешами все понятно, это не суть. Смысл вот в чем - надо просто скопировать файл в буфер, как угодно, имея только QFileInfo. Что будет потом - меня не касается, как основной вариант - вставка файла в проводнике винды или там линуха через обычный Ctrl+V. Главная заморочка - запихать нужную информацию в буфер.

Автор: Tereks 23.12.2009, 9:23

Все, проблема решена. Всем спасибо

Автор: trdm 23.12.2009, 11:32

Цитата(Tereks @ 23.12.2009, 9:23) *
Все, проблема решена. Всем спасибо

ну тады выкладывай решение. мало ли кому еще понадобится.

Автор: Tereks 24.12.2009, 9:25

А, действительно. Для тех кому еще понадобится:

QMimeData * md = new QMimeData(); // создаем новый объект QMimeData
QUrl url1;
url1.setPath( "Путь к файлу" ); // Создаем QUrl с ссылкой на искомый файл
if ( url1.isValid() )
{
       QList<QUrl> list;
       list.append( url1 );
       md->setUrls( list ); // Подпихиваем лист ссылок в объект и все в порядке
       QApplication::clipboard()->setMimeData( md );
}


У меня работает на ура.

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)