问题
Now that QPixmap::toWinHBITMAP() has been deprecated, I can't find a way to get an HBITMAP from a QPixmap (or QImage).
Googling, I found there's a function called qt_pixmapToWinHBITMAP() which seems would do what I need, but I can't find what module I should enable -if any- in my .pro file or what header I should include to use it, or perhaps something else.
The reason I need a HBITMAP is to create a video using VFW. Of course, I'd love to be able to do that using only Qt. There's the QtMultimedia module, but as far as I can tell it doesn't export video, so I guess I'm stuck with using the windows api directly.
Any help would be appreciated.
回答1:
I found it!
All I needed was QtWinExtras
http://qt.gitorious.org/qt/qtwinextras
My code now looks something like this:
#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);
I don't know if I need to include all those headers, but it works for me.
回答2:
QtWinExtras is not necessary. Just use qt_pixmapToWinHBITMAP(), as QtWinExtras does.
Declare it soon after your includes:
QT_BEGIN_NAMESPACE
Q_GUI_EXPORT HBITMAP qt_pixmapToWinHBITMAP(
const QPixmap &p, int hbitmapFormat = 0);
and just use it. For example, if you want to retrieve it from the QRC resources:
QPixmap pixmap(":/image.bmp");
HBITMAP hBitmap = qt_pixmapToWinHBITMAP(pixmap);
来源:https://stackoverflow.com/questions/17461368/getting-a-hbitmap-from-a-qpixmap-in-qt5-windows