剪切要粘贴到文件管理器中的文件

问题描述 投票:0回答:1

我想将文件放入操作系统剪贴板中。我正在使用Qt6。 Windows 代码可以工作,Unix 代码则失败。文件被复制,保留原始文件。

    auto clipboard = QApplication::clipboard();
    auto mimeData = new QMimeData();
    auto urls = QList<QUrl>();

    urls.append(QUrl::fromLocalFile(selectedFilePath));
    mimeData->setUrls(urls);
#if defined(Q_OS_MAC) || defined(Q_OS_UNIX) || defined(Q_OS_LINUX)
    mimeData->setData("application/x-cut-operation", QByteArray("true"));
#elif defined(Q_OS_WIN)
    // 2 for cut and 5 for copy
    int dropEffect = 2;
    QByteArray dataForClipboard;
    QDataStream stream(&dataForClipboard, QIODevice::WriteOnly);
    stream.setByteOrder(QDataStream::LittleEndian);
    stream << dropEffect;
    mimeData->setData("Preferred DropEffect", dataForClipboard);
    // Should catch: Q_OS_FREEBSD, Q_OS_NETBSD, Q_OS_OPENBSD, and Q_OS_LINUX
#else
    qWarning() << "Cut operation is not supported on this platform.";
#endif
    clipboard->setMimeData(mimeData);

另请参阅 Qt 应用程序和 Windows 资源管理器之间的剪切和粘贴剪贴板交换

编辑:

以下代码可在plasma6上启用复制。还是没剪。

   // https://stackoverflow.com/questions/32612779/how-to-copy-local-file-to-qclipboard-in-gnome
    QByteArray gnomeFormat =
        QByteArray("cut\n").append(QUrl::fromLocalFile(selectedFilePath).toEncoded());
    mimeData->setData("x-special/gnome-copied-files", gnomeFormat);
linux file winapi clipboard qt6
1个回答
-1
投票

据我所知,Linux 没有在应用程序之间复制文件的概念(这是不需要的,因为 shell 只需要复制和粘贴文本,拥有图形文件管理器仅适用于 Windows 傻瓜)。

如果您使用 X11 作为 Linux 的 GUI,那么 Qt 的文档是这样说的:

由于没有标准的方法来复制和粘贴文件 X11 上的应用程序,目前有各种 MIME 类型和约定 在使用中。例如,Nautilus 希望提供的文件带有 x-special/gnome-copied-files MIME 类型,数据以 剪切/复制操作、换行符和文件的 URL。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.