我们都知道这个警告来自
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();
}
是多重绘图吗?编译器什么也没有抛出,代码似乎正常工作。
答案 0 :(得分:0)
警告告诉您一次创建多个QPainter
s 。由于所有绘制事件都在主线程中处理,因此它们将被处理。只要在事件处理程序结束时销毁QPainter
对象,就不会出现警告。一台设备上的多张后续画作都很好。
然而,这种架构值得怀疑。例如,如果以这种方式绘制多个小部件,则其中一个小部件将显示旧版本的像素图,而第二个小部件将显示更新版本。这种不一致可能是个问题。在绘制事件处理程序中放置任何逻辑通常都是毫无意义的(有时是有害的)。您应该在可用数据更改时更改像素图,并在paint事件中绘制它。