Qt 多次将QPaint与QPaint设备一起使用
我们都知道这个警告Qt 多次将QPaint与QPaint设备一起使用,qt,qpainter,Qt,Qpainter,我们都知道这个警告 bool QPainter::begin(QPaintDevice * device) 警告:一个喷漆设备一次只能由一名油漆工喷漆 但如果两个对象共享一个pixmap,而一个对象栏包含另一个对象Foo呢 class Foo { public: QPixmap* barPixmap; void draw() { QPainter painter(barPixmap); painter.drawText(0,
bool QPainter::begin(QPaintDevice * device)
警告:一个喷漆设备一次只能由一名油漆工喷漆
但如果两个对象共享一个pixmap,而一个对象栏包含另一个对象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();
}
是多重绘图吗?编译器不会抛出任何内容,代码似乎正常工作。警告告诉您如何一次创建多个
QPainter
s。由于所有绘制事件都是在主线程中处理的,因此会对它们进行相应的处理。只要qPaint
对象在事件处理程序的末尾被销毁,警告就不会出现。在一台设备上进行多幅后续绘画是可以的
然而,架构是有问题的。例如,如果以这种方式绘制多个小部件,其中一个小部件将显示旧版本的pixmap,而第二个小部件将显示更新的版本。这种不一致性可能是一个问题。在绘制事件处理程序中放置任何逻辑通常是毫无意义的(有时是有害的)。当可用数据更改时,您应该更改pixmap,只需在paint事件中绘制它。它可以工作,但看起来像fooObject->draw();不要使用barPixmapSure,架构是有问题的。我正在移植1994年的老代码,我必须保存体系结构。