【问题标题】:QT: Scroll widget that renders directly to the DCQT:直接渲染到 DC 的滚动小部件
【发布时间】:2010-03-22 19:03:32
【问题描述】:

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

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

我错过了什么?

【问题讨论】:

    标签: windows qt gdi


    【解决方案1】:

    在这里找到答案:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-17
      • 1970-01-01
      • 2021-02-03
      • 2010-12-30
      • 2015-04-24
      • 2017-01-13
      • 2015-02-26
      • 2021-11-12
      相关资源
      最近更新 更多