首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将本地文件复制到QClipboard (在Gnome中)?

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

Stack Overflow用户
提问于 2015-09-16 23:25:00
回答 2查看 1.4K关注 0票数 1

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

EN

回答 2

Stack Overflow用户

发布于 2015-09-17 00:31:24

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

代码语言:javascript
复制
QMimeData* mimeData = new QMimeData();
mimeData->setData("text/uri-list", "file:///C:/fileToCopy.txt");
clipboard->setMimeData(mimeData);

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

代码语言:javascript
复制
mimeData->setData("text/uri-list", QUrl::fromLocalFile("C:/fileToCopy.txt"));
票数 3
EN

Stack Overflow用户

发布于 2015-09-17 04:01:46

好吧,我找到了我的问题的解决方案。问题是gnome (在linux上工作)做自己的事情。这些文件不像前面提到的N1ghtLight那样以text/uri-list格式存储,而是使用特殊的x-special/gnome-copied-files格式。下面的代码做到了这一点:

代码语言:javascript
复制
//  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);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32612779

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档