form1.cpp:113:31: No member named 'fromWinHBITMAP' in 'QImage'
时间: 2023-07-29 13:09:34 浏览: 145
非常抱歉,我之前的回答还是有误。在 Qt 6 中,确实没有 `QImage::fromWinHBITMAP()` 函数。如果需要将 Windows 设备无关位图句柄转换为 QImage 对象,可以使用以下代码:
```cpp
HBITMAP hBitmap = ...; // 通过某种方式获取 HBITMAP 句柄
BITMAPINFO info;
GetObject(hBitmap, sizeof(BITMAPINFO), &info);
int width = info.bmiHeader.biWidth;
int height = info.bmiHeader.biHeight;
HDC hdc = GetDC(NULL);
QImage image = QImage(width, height, QImage::Format_ARGB32);
BitBlt(image.bits(), 0, 0, width, height, hdc, 0, 0, SRCCOPY | CAPTUREBLT);
ReleaseDC(NULL, hdc);
```
上述代码中,我们首先通过 `GetObject()` 函数获取位图信息,然后根据位图信息的宽度和高度,创建一个空的 QImage 对象,格式为 ARGB32。接着,使用 `BitBlt()` 函数将屏幕上的像素复制到 QImage 对象中。最后,使用 `ReleaseDC()` 函数释放设备上下文句柄。
需要注意的是,`BitBlt()` 函数只能用于获取当前屏幕的像素,如果需要获取某个窗口或控件的像素,需要使用 `PrintWindow()` 函数将其绘制到一个临时的设备上下文中,然后再使用 `BitBlt()` 函数将其复制到 QImage 对象中。
阅读全文