QT: виджет прокрутки, который отображается непосредственно в DC - PullRequest
3 голосов
/ 22 марта 2010

Я пытаюсь создать виджет, который рисует непосредственно в контекст устройства Windows, вызывая getDC() и рисуя HBITMAP.
Виджет, который я рисую, находится внутри виджета с прокруткой.
Я реализовал paintEvent(), и он, кажется, рисует, но сразу после рисования виджет снова закрашивается пустым серым цветом.

Я пытался установить WA_PaintOnScreen и Qt::WA_NoSystemBackground, но ничего из этого не помогло.
Теоретически это должно быть возможно, поскольку именно так работает GLWidget.

Чего мне не хватает?

1 Ответ

3 голосов
/ 23 марта 2010

Нашел ответ здесь:

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 атрибут в конструктор виджета.

...