首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我可以重用QPainter吗?

我可以重用QPainter吗?
EN

Stack Overflow用户
提问于 2015-04-23 20:19:28
回答 4查看 923关注 0票数 1

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

代码语言:javascript
复制
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来获得性能点击/更高的内存使用量?

正在尝试

代码语言:javascript
复制
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();

我得到了这类错误

代码语言:javascript
复制
error: 'QPainter& QPainter::operator=(const QPainter&)' is private
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-04-23 22:17:49

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

代码语言:javascript
复制
QPainter painter;

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

但是,您只能对一个QPainter使用一个QPaintDevice (在本例中是图像)。

看看这个。

票数 3
EN

Stack Overflow用户

发布于 2015-04-23 22:34:29

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

所以..。

代码语言:javascript
复制
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正在发布他的答案,我想我更喜欢这个答案。

票数 0
EN

Stack Overflow用户

发布于 2015-04-23 22:40:31

您不需要这样写:

画家=新QPainter( &img );

您可以这样写:

QPainter画家( &img );

有了这个,您就不必考虑删除该命令。

是的,所有QObject派生类都有私有副本构造函数。你可以在这里读到原因。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29833533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档