Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 如何将本地文件复制到QClipboard(在Gnome中)?_Qt_Clipboard_Gnome - Fatal编程技术网

Qt 如何将本地文件复制到QClipboard(在Gnome中)?

Qt 如何将本地文件复制到QClipboard(在Gnome中)?,qt,clipboard,gnome,Qt,Clipboard,Gnome,QClipboard提供了几种将内容复制到剪贴板的方法。标准桌面有高级功能(文本、pixmaps等),但我不知道如何实现标准的复制文件操作。谷歌并没有提供帮助。只需将适当的mime类型和本地文件的URL放入剪贴板即可 您可以使用静态方法获取要在mimeData->setData中使用的QUrl实例: mimeData->setData("text/uri-list", QUrl::fromLocalFile("C:/fileToCopy.txt")); 只需将适当的mime类型和本地文件

QClipboard提供了几种将内容复制到剪贴板的方法。标准桌面有高级功能(文本、pixmaps等),但我不知道如何实现标准的复制文件操作。谷歌并没有提供帮助。

只需将适当的mime类型和本地文件的URL放入剪贴板即可

您可以使用静态方法获取要在
mimeData->setData
中使用的QUrl实例:

mimeData->setData("text/uri-list", QUrl::fromLocalFile("C:/fileToCopy.txt"));

只需将适当的mime类型和本地文件的URL放入剪贴板即可

您可以使用静态方法获取要在
mimeData->setData
中使用的QUrl实例:

mimeData->setData("text/uri-list", QUrl::fromLocalFile("C:/fileToCopy.txt"));

好吧,我找到了解决问题的办法。问题是gnome(在linux上工作)做自己的事情。文件不以所述的N1ghtLight格式存储在
text/uri列表中,而是使用特殊的
x-special/gnome复制文件格式。以下代码完成了此操作:

//  Get clipboard
QClipboard *cb = QApplication::clipboard();

// Ownership of the new data is transferred to the clipboard.
QMimeData* newMimeData = new QMimeData();

// Copy old mimedata
const QMimeData* oldMimeData = cb->mimeData();
for ( const QString &f : oldMimeData->formats())
    newMimeData->setData(f, oldMimeData->data(f));

// Copy path of file
newMimeData->setText(_file->absolutePath());

// Copy file
newMimeData->setUrls({QUrl::fromLocalFile(_file->absolutePath())});

// Copy file (gnome)
QByteArray gnomeFormat = QByteArray("copy\n").append(QUrl::fromLocalFile(_file->absolutePath()).toEncoded());
newMimeData->setData("x-special/gnome-copied-files", gnomeFormat);

// Set the mimedata
cb->setMimeData(newMimeData);

好吧,我找到了解决问题的办法。问题是gnome(在linux上工作)做自己的事情。文件不以所述的N1ghtLight格式存储在
text/uri列表中,而是使用特殊的
x-special/gnome复制文件格式。以下代码完成了此操作:

//  Get clipboard
QClipboard *cb = QApplication::clipboard();

// Ownership of the new data is transferred to the clipboard.
QMimeData* newMimeData = new QMimeData();

// Copy old mimedata
const QMimeData* oldMimeData = cb->mimeData();
for ( const QString &f : oldMimeData->formats())
    newMimeData->setData(f, oldMimeData->data(f));

// Copy path of file
newMimeData->setText(_file->absolutePath());

// Copy file
newMimeData->setUrls({QUrl::fromLocalFile(_file->absolutePath())});

// Copy file (gnome)
QByteArray gnomeFormat = QByteArray("copy\n").append(QUrl::fromLocalFile(_file->absolutePath()).toEncoded());
newMimeData->setData("x-special/gnome-copied-files", gnomeFormat);

// Set the mimedata
cb->setMimeData(newMimeData);

上面有快捷方式:
mimeData->seturl({QUrl::fromLocalFile(C:/fileToCopy.txt)})
上面有快捷方式:
mimeData->seturl({QUrl::fromLocalFile(C:/fileToCopy.txt)})此外,在Gnome的情况下,多个文件必须用新行分隔
'\n'
。但是,不允许尾随新行。此外,在Gnome情况下,多个文件必须用新行分隔
'\n'
。但是,不允许尾随新行。