繁体   English   中英

如何通过QClipboard将多张图像设置到系统剪贴板?

[英]How can I set multiple images to system clipboard by QClipboard?

我现在可以通过QClipboard :: setImage()将一个图像设置到系统剪贴板。

如何通过QClipboard将多张图像设置到系统剪贴板?

任何答案都将有所帮助,谢谢。


我使用了mimedata遵循Haru的建议,现在可以将多个图像复制到文件系统。 但是当我将多个图像而不是图像复制到网站时,它们将是URI。 有人有主意吗? 非常感谢你!

void copyImageToClipboard(const QStringList &paths)
{
    //  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 file (gnome)
    QByteArray gnomeFormat = QByteArray("copy\n");
    QString text;
    QList<QUrl> dataUrls;
    for (QString path : paths) {
        if (!path.isEmpty())
            text += path + '\n';
        dataUrls << QUrl::fromLocalFile(path);
        gnomeFormat.append(QUrl::fromLocalFile(path).toEncoded()).append("\n");
    }

    newMimeData->setText(text.endsWith('\n') ? text.left(text.length() - 1) : text);
    newMimeData->setUrls(dataUrls);
    gnomeFormat.remove(gnomeFormat.length() - 1, 1);
    newMimeData->setData("x-special/gnome-copied-files", gnomeFormat);

    // Copy Image Date
    QImage img(paths.first());
    Q_ASSERT(!img.isNull());
    newMimeData->setImageData(img);

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM