如何在c ++中从Qclipboard mimeData获取剪贴板图像?

时间:2017-10-19 08:36:24

标签: c++ qt clipboard

所以这是交易,我正在尝试获取剪贴板图像(任何格式),我正在尝试的方法返回NULL或返回文本格式的图像路径,如此

enter image description here

我已经用Google搜索过了,我也问过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)st方法返回图像路径

(2)nd方法返回null

(3)rd方法仅返回打印屏幕图像。不知道为什么,可能是因为.bmp格式。

我现在完全无能为力如何解决这个问题,请帮助我。

1 个答案:

答案 0 :(得分: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 :)你摇滚。