多次使用QPainter和QPaintDevice

时间:2014-12-31 10:05:40

标签: qt qpainter

我们都知道这个警告来自

bool QPainter::​begin(QPaintDevice * device)   

警告:一个画家一次只能画一幅画设备。

http://doc.qt.io/qt-5/qpainter.html#begin

但是,如果我有两个对象共享一个像素图,一个对象栏包含其他对象Foo。

class Foo
{
public:
    QPixmap* barPixmap;
    void draw()
    {
         QPainter painter(barPixmap);
         painter.drawText(0,0,"FooText");
    }

}

class Bar
{
public:
    QPixmap* barPixmap;
    Foo*     fooObject;
}

我得到了类似的东西

Bar::paintEvent(QPaintEvent* )
{
    QPainter painter(barPixmap);
    painter.drawText(50,50,"BarText");
    fooObject->draw();

}

是多重绘图吗?编译器什么也没有抛出,代码似乎正常工作。

1 个答案:

答案 0 :(得分:0)

警告告诉您一次创建多个QPainter s 。由于所有绘制事件都在主线程中处理,因此它们将被处理。只要在事件处理程序结束时销毁QPainter对象,就不会出现警告。一台设备上的多张后续画作都很好。

然而,这种架构值得怀疑。例如,如果以这种方式绘制多个小部件,则其中一个小部件将显示旧版本的像素图,而第二个小部件将显示更新版本。这种不一致可能是个问题。在绘制事件处理程序中放置任何逻辑通常都是毫无意义的(有时是有害的)。您应该在可用数据更改时更改像素图,并在paint事件中绘制它。