我正在尝试创建一个小部件,通过调用getDC()
并将HBITMAP
绘制到它来直接绘制到Windows设备上下文。
我正在绘制的小部件位于滚动小部件内
我已经实现了paintEvent()
并且它确实在绘制后立即绘制,但是在绘制之后立即重新绘制了一个灰色的空白。
我已尝试设置WA_PaintOnScreen
和Qt::WA_NoSystemBackground
,但这些都没有帮助
理论上这应该是可能的,因为这基本上是GLWidget
的工作方式。
我错过了什么?
答案 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
属性 小部件的构造函数。