Windows QT:直接呈现给DC的滚动小部件
我试图创建一个小部件,通过调用Windows QT:直接呈现给DC的滚动小部件,windows,qt,gdi,Windows,Qt,Gdi,我试图创建一个小部件,通过调用getDC()并向其绘制HBITMAP来直接绘制windows设备上下文。 我正在绘制的小部件位于滚动小部件中。 我已经实现了paintEvent(),它看起来确实在画画,但画画之后,小部件立即被重新画成一个空白的灰色 我试过在屏幕上设置WA_painton screen和Qt::WA_NoSystemBackground,但没有任何帮助。 理论上这应该是可能的,因为这基本上就是GLWidget的工作方式 我遗漏了什么?在这里找到了答案: 为了使这一点发挥作用,我
getDC()
并向其绘制HBITMAP
来直接绘制windows设备上下文。我正在绘制的小部件位于滚动小部件中。
我已经实现了
paintEvent()
,它看起来确实在画画,但画画之后,小部件立即被重新画成一个空白的灰色
我试过在屏幕上设置WA_painton screen
和Qt::WA_NoSystemBackground
,但没有任何帮助。理论上这应该是可能的,因为这基本上就是
GLWidget
的工作方式
我遗漏了什么?在这里找到了答案:
为了使这一点发挥作用,我们还必须
重新实施
QPaintDevice::paintEngine()
返回
一个空指针,并设置
Qt::WA_painton screen中的属性
小部件的构造函数
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);
}