QSvgRenderer 分段错误

0 投票
2 回答
1116 浏览
提问于 2025-04-16 00:35

我知道像这样具体的问题可能不太好,但我已经花了好几天在琢磨这个问题。希望这里有人能帮我。

这段使用PyQt4的Python代码导致了一个段错误:

data = """<?xml version="1.0" ?>
          <svg height="1000" width="2000">
              <text>blah</text>
          </svg>"""

svg = QSvgRenderer(QByteArray(data))
qim = QImage(int(width), int(height), QImage.Format_ARGB32)
painter = QPainter()

painter.begin(qim)
svg.render(painter)
painter.end()

qim.save('test2.png')

导致错误的那一行是 svg.render(painter)

错误指向了 libQtGui.so(也就是说可能是 QPainterQImage 里面的问题)。

svg.isValid() 返回 True,而 qim.isNull() 返回 False

2 个回答

0

试着在QPixmap上绘图,而不是在QImage上。

Qt有时候会出现程序崩溃的情况,我通常会想办法绕过这些问题。也许你可以在Gimp里把这个SVG文件转换成图像,然后直接加载那个图像。

0

只需要稍微改动一下(定义宽度和高度),它就能正常运行了。需要注意的是,我看不到任何文字,但如果我把数据换成我知道是有效的内容,它就能完美运行。下面是我的完整代码:

#!/usr/bin/env python

from  PyQt4.QtGui import *
from  PyQt4.QtCore import *
from PyQt4.QtSvg import *
import sys

if __name__ == '__main__':

    app = QApplication(sys.argv)

    data = """... (my valid svg) ..."""
    
    svg = QSvgRenderer(QByteArray(data))
    qim = QImage(int(2000), int(1000), QImage.Format_ARGB32)
    painter = QPainter()

    painter.begin(qim)
    svg.render(painter)
    painter.end()

    print "null:", qim.isNull()
    qim.save('test2.png')

撰写回答