Matcha芥末酱 2023-10-11 20:45 采纳率: 37.5%
浏览 32
已结题

获取剪切板图片的格式问题


QClipboard *clipboard;
 clipboard=QGuiApplication::clipboard();
const QMimeData *mimeData =clipboard->mimeData();
qDebug()<<mimeData->formats()<<Qt::endl;

上面代码得出的结果是

img


没有"image/jpg"类型的,全是application/x-qt-windows-mime类型的,有相关博客内容

img


并不能解决问题,我就想知道这么多application/x-qt-windows-mime类型的数据怎么操作,我只是想得到剪切板的图片

img


看人家的代码跟我的没什么区别,但是人家mimeData->hasImage()的值就是1,代表获取到了"image/png"类型的数据,所以我这种情况有谁遇到过吗?这么多application/x-qt-windows-mime类型的数据怎么操作?chat-gpt回答勿扰。

if(mimeData->hasImage())
        {
            //将图片数据转为QImage
            QImage img = qvariant_cast<QImage>(mimeData->imageData());
            qDebug()<<"has image"<<Qt::endl;

        }else if(mimeData->hasText()){
            qDebug()<<mimeData->text()<<Qt::endl
                 <<" clipboard is empty";
        }


接上面代码,这段代码运行不会运行第一个if,直接到第二个else if,足以说明没有"image"格式的,
所以如果复制图片,结果mimeData没有图片格式的数据怎么回事。

  • 写回答

11条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2023-10-11 20:47
    关注

    引自强大而免费的微信小程序:皆我百晓生。如有帮助,还望采纳。


    根据您提供的代码和描述,主要问题在于您没有正确获取剪切板中的图片数据。在调用mimeData()函数时,您实际上是创建了一个新的QMimeData对象并将其赋值给了mimeData指针,导致丢失剪切板中的数据。

    要获取剪切板中的图片数据,您可以使用以下代码:

    QClipboard *clipboard = QGuiApplication::clipboard();
    const QMimeData *mimeData = clipboard->mimeData();
    
    if (mimeData->hasImage()) {
        QImage image = qvariant_cast<QImage>(mimeData->imageData());
        // 在这里处理获取到的图片数据(image)
    }
    

    通过mimeData->hasImage()判断剪切板中是否存在图片数据,如果存在则使用qvariant_cast<QImage>(mimeData->imageData())获取图片数据并进行操作。

    至于那些application/x-qt-windows-mime类型的数据,是Qt框架自带的用于在不同平台之间传输剪切板数据的标准格式,您一般不需要手动处理。在您需要处理其他类型的数据时,可以使用mimeData->data(format)来获取相应格式的数据,并进行解析和处理。

    希望对您有所帮助!

    评论

报告相同问题?

问题事件

  • 系统已结题 10月19日
  • 修改了问题 10月11日
  • 修改了问题 10月11日
  • 创建了问题 10月11日