【问题标题】:Convert HICON to QIcon in Qt 6在 Qt 6 中将 HICON 转换为 QIcon
【发布时间】:2021-08-02 21:01:07
【问题描述】:

我正在尝试将 HICON 转换为 Qt6 中的 QIcon/QPixmap。在较旧的 Qt 版本中,曾经有一个 fromHICON 函数使这种转换非常容易。不幸的是,他们在 Qt6 中删除了它,所以我尝试按照 answer 自己做:

HDC hdc = GetDC(hwnd);
HBITMAP hbitmap = CreateCompatibleBitmap(hdc, 32, 32);
hdc = CreateCompatibleDC(hdc);
SelectObject(hdc, hbitmap);

// Calculate size of buffer
BITMAP BitmapInfo = {0};
DWORD BitmapImageSize = BitmapInfo.bmHeight * BitmapInfo.bmWidth * (BitmapInfo.bmBitsPixel / 8);

// Allocate memory
BYTE *pBitmapData = new BYTE[BitmapImageSize];
ZeroMemory(pBitmapData, BitmapImageSize);

// Get Bitmap data
GetBitmapBits(hbitmap, BitmapImageSize, pBitmapData);

QImage image = QImage(pBitmapData, 32, 32, QImage::Format_ARGB32_Premultiplied);

ui->label->setPixmap(QPixmap::fromImage(image));
ui->label->setScaledContents(true);

// delete data
delete[] pBitmapData;

但是,我一定搞砸了。图像只是一些随机噪声,有时应用程序也会崩溃。

Displayed image

附加信息:图标是这样获取的:

HICON icon = (HICON)GetClassLong(hwnd, -14);

【问题讨论】:

标签: c++ winapi qt6


【解决方案1】:

在 QT 6 中,QtWin::fromHICON() 的实现(减去到 QPixmap 的转换)已转移到 QImage 的静态函数中。 所以现在你只需要。

  QPixmap pixmap = QPixmap::fromImage(QImage::fromHICON(icon));

【讨论】:

    猜你喜欢
    • 2011-11-14
    • 2019-01-29
    • 2021-05-13
    • 2014-09-25
    • 1970-01-01
    • 2013-02-24
    • 1970-01-01
    • 2016-08-14
    • 2011-12-23
    相关资源
    最近更新 更多