繁体   English   中英

我可以重用QPainter吗?

[英]can I reuse the QPainter?

渲染到位图,我必须创建一个QPainter。 如果必须将多个区域渲染到多个位图,如何重置QPainter?

QImage img1(scene1.sceneRect().size().toSize(), QImage::Format_ARGB32_Premultiplied);
img1.fill(Qt::color0);
QPainter painter1(&img1);
painter1.setRenderHint(QPainter::Antialiasing);
scene1.render(&painter1);
painter1.end();

QImage img2(scene2.sceneRect().size().toSize(), QImage::Format_ARGB32_Premultiplied);
img2.fill(Qt::color0);
QPainter painter2(&img2);
painter2.setRenderHint(QPainter::Antialiasing);
scene2.render(&painter2);
painter2.end();

如何重用画家? 通过为每个场景/图像创建一个新的QPainter,我是否获得了性能提升/更高的内存使用率?

QImage img(scene1.sceneRect().size().toSize(), QImage::Format_ARGB32_Premultiplied);
img.fill(Qt::color0);
QPainter painter(&img);
painter.setRenderHint(QPainter::Antialiasing);
scene1.render(&painter);
painter.end();
img.save("img.png");

img = QImage(scene2.sceneRect().size().toSize(), QImage::Format_ARGB32_Premultiplied);
img.fill(Qt::color0);
painter = QPainter(&img);
painter.setRenderHint(QPainter::Antialiasing);
scene2.render(&painter);
painter.end();

我收到类型错误

error: 'QPainter& QPainter::operator=(const QPainter&)' is private

您可以使用以下语法重用QPainter

QPainter painter;

painter.begin( &img1 );
...
painter.begin( &img2 );
...

但是您只能将一个QPainter用于一个QPaintDevice (在本例中为图像)。

读这个。

似乎QObject和从其派生的类以及QPainter以及其他类都具有私有构造函数(为什么?)

所以...

QImage img(scene1.sceneRect().size().toSize(), QImage::Format_ARGB32_Premultiplied);
img.fill(Qt::color0);
QPainter* painter = new QPainter(&img);
painter->setRenderHint(QPainter::Antialiasing);
scene1.render(painter);
painter->end();
img.save("img.png");

img = QImage(scene2.sceneRect().size().toSize(), QImage::Format_ARGB32_Premultiplied);
img.fill(Qt::color0);
painter = new QPainter(&img);
painter->setRenderHint(QPainter::Antialiasing);
scene2.render(painter);
painter->end();

delete painter;

我正在写这篇文章,就像vizhanyolajos发布他的答案一样,我想我更喜欢那个答案。

您无需编写此代码:

QPainter * painter =新的QPainter(&img);

您可以这样写:

QPainter painter(&img);

这样,您就不必考虑删除对象了。

是的,所有QObject派生类都有私有副本构造函数。 您可以在此处了解原因。

我认为您不必担心QImage的重用。 您可以实例化一个新实例,并使用QPainter类的being(...)函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM