QT:直接呈现给DC的滚动窗口小部件

我试图创build一个窗口部件,通过调用getDC()直接绘制到Windows Device Context并绘制一个HBITMAP
我正在绘制的小部件驻留在一个滚动小部件中。
我已经实现了paintEvent() ,它看起来好像在绘制小部件之后立即绘制,然后用灰色的空白颜色再次绘制。

我试过设置WA_PaintOnScreenQt::WA_NoSystemBackground但没有一个帮助。
理论上这应该是可能的,因为这基本上是GLWidget工作原理。

我错过了什么?

在这里找到答案:

http://www.qtchina.net/qt4c++guiprogramming/ch20lev1sec1.html/

 void GdiControl::paintEvent(QPaintEvent * /* event */) { RECT rect; GetClientRect(winId(), &rect); HDC hdc = GetDC(winId()); FillRect(hdc, &rect, HBRUSH(COLOR_WINDOW + 1)); SetTextAlign(hdc, TA_CENTER | TA_BASELINE); TextOutW(hdc, width() / 2, height() / 2, text.utf16(), text.size()); ReleaseDC(winId(), hdc); } 

为此,我们还必须重新实现QPaintDevice::paintEngine()来返回一个空指针,并在小部件的构造函数中设置Qt::WA_PaintOnScreen属性。