如何在C++中从QClipboard的mimeData获取剪贴板图像?

4
所以这是个问题,我正在尝试获取剪贴板中的图像(任何格式),但我尝试的方法要么返回NULL,要么返回格式化的文本路径,如下所示: enter image description here 我已经在谷歌上搜索过,并且也在Reddit上询问过,但我仍然无法弄清楚发生了什么。
以下是我尝试过的方法:
(1)
const QClipboard *cb = QApplication::clipboard();
const QMimeData *md = cb->mimeData();
QListWidgetItem *item = new QListWidgetItem();
QLabel *label = new QLabel();
if (md->hasImage())
{

    label->setPixmap(cb->pixmap());
    ui.listWidget->setIconSize(QSize(100, 200));
    ui.listWidget->addItem(item);
    ui.listWidget->setItemWidget(item, label);

}
else if (md->hasText())
{
    ui.listWidget->addItem(cb->text());

} 

(2)

label->setPixmap(cb->image());

(3)
HBITMAP MemoryManager::ImageFomClipboard(HWND hWnd)
{
    if (!OpenClipboard(hWnd))
        return NULL;

    HBITMAP hBitmap = (HBITMAP)GetClipboardData(CF_BITMAP);
    CloseClipboard();
    return hBitmap;
}

std::string MemoryManager::get_image(std::string number)
{
    HWND hWnd = GetDesktopWindow();
    HBITMAP hBitmap = ImageFomClipboard(hWnd);
    if (hBitmap != NULL)
    {
        CImage image;
        image.Attach(hBitmap);
        image.Save(_T("C:/temp/asx.bmp"), Gdiplus::ImageFormatBMP);
    }
    return "C:/temp/asx.bmp";
}

(1) 第一个方法返回图像的路径。

(2) 第二个方法返回空值。

(3) 第三个方法只返回打印屏幕截图。不知道为什么,可能是因为.bmp格式。

我现在完全不知道如何解决这个问题,请帮帮我。


1
尝试这个:QImage img(cb->image()); label->setPixmap(QPixmap::fromImage(img)); - Xplatforms
@Xplatforms,太棒了,它可以用于截屏,但不能用于普通图像。你有什么想法? - akshay
1
如果您复制图像数据,则在剪贴板中会有图像,但如果您复制图像文件,则在剪贴板中会有该文件的路径。只需加载此路径到QImage并以相同方式设置即可。 else if(md->formats().contains(QStringLiteral("text/uri-list"))) { QImage img(QUrl(cb->text()).toLocalFile()); label->setPixmap(QPixmap::fromImage(img));} - Xplatforms
@Xplatforms 太棒了,老兄。。。它完美地运作了。非常感谢 :) - akshay
1个回答

2
感谢@Xplatforms,我得到了这个解决方案。
QImage img(cb->image()); label->setPixmap(QPixmap::fromImage(img));
else if(md->formats().contains(QStringLiteral("text/uri-list"))) { QImage img(QUrl(cb->text()).toLocalFile());
     label->setPixmap(QPixmap::fromImage(img));

再次感谢 @Xplatforms :) 你太棒了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接