为什么QPainter 绘制svg时设置颜色没有效果?
时间: 2023-12-11 20:02:58 浏览: 86
Qt例程源代码QPainter.7z
如果您使用`QSvgRenderer`和`QPainter`来绘制SVG文件,但设置颜色没有效果,可能是因为SVG文件中的某些元素使用了硬编码的颜色。在这种情况下,渲染器会忽略任何颜色设置,因为SVG文件中的颜色比渲染器中指定的颜色更具体。
要解决这个问题,可以尝试将SVG文件中的颜色替换为可以通过渲染器设置的颜色。例如,您可以使用`QString::replace()`方法将SVG文件中的颜色替换为占位符,然后在渲染器中使用实际的颜色替换占位符。以下是一个示例代码:
```cpp
#include <QSvgRenderer>
#include <QPainter>
void changeSvgColor(const QString &filePath, const QColor &color, QImage &image)
{
QSvgRenderer renderer(filePath);
QPainter painter(&image);
// Replace all instances of "red" with the desired color
QString svgString = QString(renderer.currentBoundDocument().data());
QString colorString = QString("rgb(%1, %2, %3)").arg(color.red()).arg(color.green()).arg(color.blue());
svgString.replace("red", colorString);
// Create a new SVG renderer from the modified SVG string
QSvgRenderer newRenderer(svgString.toUtf8());
// Render the modified SVG to the QImage
newRenderer.render(&painter);
}
```
在上述代码中,`changeSvgColor()`函数从给定的SVG文件中创建一个`QSvgRenderer`对象,并将SVG文件中的所有“red”字符串替换为指定的颜色。然后,我们使用修改后的SVG字符串创建一个新的`QSvgRenderer`对象,并将其用于渲染图像。
请注意,如果SVG文件中的颜色不是硬编码的,而是使用CSS样式表定义的,则可以使用`QPainter::setRenderHint()`方法启用`QPainter::Antialiasing`标志,以使颜色设置生效。
阅读全文