【发布时间】:2015-03-15 15:36:23
【问题描述】:
我的 Qt 应用程序使用 QPainter 来绘制矢量图形。我需要这个图形输出两次,一次作为 SVG 格式的矢量输出,我使用 QSvgGenerator,一次作为像素格式,我使用 QImage。 根据我在文档中找到的内容,我可以先绘制为 SVG,然后将 SVG 输出转换为 Qimage:
QPainter painter;
QSvgGenerator generator;
generator.setSize(QSize(width_, height_));
// more initializations here
painter.begin(&generator);
doPaintMyStuff(&painter);
painter.end();
generator.setOutputDevice(...) // pipe the SVG output to the server
QImage image(width_, height_, QImage::Format_ARGB32_Premultiplied);
QSvgRenderer renderer;
renderer.load(...) // get the svg output we just generated
painter.begin(&image);
renderer.render(&painter); // render the vector graphic to pixel
painter.end();
usePixelData(image.constBits()); // pipe the pixel output to the server
或使用两个不同的后端绘制两次:
QPainter painter;
QSvgGenerator generator;
generator.setSize(QSize(width_, height_));
// more initializations here
QImage image(width_, height_, QImage::Format_ARGB32_Premultiplied);
painter.begin(&generator);
doPaintMyStuff(&painter);
painter.end();
painter.begin(&image);
doPaintMyStuff(&painter);
painter.end();
generator.setOutputDevice(...) // pipe the SVG output to the server
usePixelData(image.constBits()); // pipe the pixel output to the server
这两种解决方案都有效,但对我来说似乎都非常低效,因为我总是两次绘制相同的场景。后者调用 QPainter 上的所有函数两次,前者通过重新跟踪我刚刚生成的 SVG 输出再次绘制所有操作。
有没有办法将多个后端附加到一个 QPainter 以仅绘制整个场景一次?
【问题讨论】:
标签: c++ qt svg qpainter qimage