代码之家  ›  专栏  ›  技术社区  ›  colinmarc

qsvg渲染器分段错误

  •  0
  • colinmarc  · 技术社区  · 16 年前

    我意识到像这样的具体问题不太好,但我花了几天时间试图解决这个问题。希望这里有人能帮忙。

    使用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 (所以 QPainter QImage )

    svg.isValid() 收益率 True qim.isNull() 收益率 False .

    2 回复  |  直到 16 年前
        1
  •  0
  •   Kaleb Pederson    16 年前

    只需稍作改动(定义宽度和高度),它就可以为我工作。请注意,我看不到任何文本,但是如果我将数据换成我知道有效的东西,它会非常好地工作。以下是我的完整代码:

    #!/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')
    
        2
  •  0
  •   Nathan    16 年前

    尝试让它在qpixmap上绘制,而不是在qimage上绘制。

    qt偶尔会导致segfaults,我通常只是在它们周围进行编码。 也许你可以在Gimp中对这个SVG进行光栅化,然后加载它。