问题 从QT5中的QPixmap获取HBITMAP(Windows)


既然不推荐使用QPixmap :: toWinHBITMAP(),我找不到从QPixmap(或QImage)获取HBITMAP的方法。

谷歌搜索,我发现有一个名为qt_pixmapToWinHBITMAP()的函数似乎可以做我需要的,但我找不到我应该启用哪个模块-if any-在我的.pro文件中或者我应该包含哪些标题来使用它,或者也许别的东西。

我需要HBITMAP的原因是使用VFW创建视频。当然,我希望能够只使用Qt来做到这一点。有QtMultimedia模块,但据我所知,它不会导出视频,所以我想我一直坚持使用windows api。

任何帮助,将不胜感激。


7533
2017-07-04 03:26


起源

嗨,你有没有找到替代方案?我刚刚升级到Qt5并且遇到了与'fromWinHICON'和'fromWinHBITMAP'调用相同的问题。 - Dalamber


答案:


我找到了!

我需要的只是QtWinExtras

http://qt.gitorious.org/qt/qtwinextras

我的代码现在看起来像这样:

#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <qt_windows.h>
#include <QtWinExtras/QWinFunctions>


...
QPixmap pix(QSize(w,h));
...
HBITMAP hbm = QWinExtras::toHBITMAP(pix);
...
::DeleteObject(hbm);

我不知道是否需要包含所有这些标题,但它对我有用。


10
2017-09-18 01:25





QtWinExtras不是必需的。 只需使用qt_pixmapToWinHBITMAP(),就像QtWinExtras那样。

在您的包含后立即声明:

QT_BEGIN_NAMESPACE
Q_GUI_EXPORT HBITMAP qt_pixmapToWinHBITMAP(
    const QPixmap &p, int hbitmapFormat = 0);

并且只是使用它。 例如,如果要从QRC资源中检索它:

QPixmap pixmap(":/image.bmp");
HBITMAP hBitmap = qt_pixmapToWinHBITMAP(pixmap);

4
2018-03-26 08:54