我正在尝试在Qt6中将HICON转换为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;
然而,我一定是搞砸了什么。图像只是一些随机的噪声,有时应用程序也会崩溃。
附加信息:该图标如下所示:
HICON icon = (HICON)GetClassLong(hwnd, -14);
发布于 2021-05-13 15:51:02
在Qt6中,QtWin::fromHICON()的实现(除了转换为QPixmap)已经移到了QImage的静态函数中。所以现在你只需要。
QPixmap pixmap = QPixmap::fromImage(QImage::fromHICON(icon));
https://stackoverflow.com/questions/67504639
复制相似问题