QT:直接渲染到DC的滚动小部件

时间:2010-03-22 19:03:32

标签: windows qt device-context

我正在尝试创建一个小部件,通过调用getDC()并将HBITMAP绘制到它来直接绘制到Windows设备上下文。 我正在绘制的小部件位于滚动小部件内 我已经实现了paintEvent()并且它确实在绘制后立即绘制,但是在绘制之后立即重新绘制了一个灰色的空白。

我已尝试设置WA_PaintOnScreenQt::WA_NoSystemBackground,但这些都没有帮助 理论上这应该是可能的,因为这基本上是GLWidget的工作方式。

我错过了什么?

1 个答案:

答案 0 :(得分:3)

在这里找到答案:

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属性   小部件的构造函数。