渲染到位图,我必须创建一个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发布于 2015-04-23 22:17:49
可以使用以下语法重用您的QPainter:
QPainter painter;
painter.begin( &img1 );
...
painter.begin( &img2 );
...但是,您只能对一个QPainter使用一个QPaintDevice (在本例中是图像)。
看看这个。
发布于 2015-04-23 22:34:29
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正在发布他的答案,我想我更喜欢这个答案。
发布于 2015-04-23 22:40:31
您不需要这样写:
画家=新QPainter( &img );
您可以这样写:
QPainter画家( &img );
有了这个,您就不必考虑删除该命令。
是的,所有QObject派生类都有私有副本构造函数。你可以在这里读到原因。
https://stackoverflow.com/questions/29833533
复制相似问题