使用QGraphicsScene :: addItem将QPixmap项添加到QGraphicsScene会导致PySide崩溃

前端之家收集整理的这篇文章主要介绍了使用QGraphicsScene :: addItem将QPixmap项添加到QGraphicsScene会导致PySide崩溃前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试将图像添加到QGraphicsView / QGraphicsScene,以便稍后我可以根据用户的输入在其上绘制简单的几何图形.我需要确保图像适合QGraphicsView,无论其纵横比如何.为此,我使用的是QGraphicsView :: fitInView

工作版本:

如果我使用QGraphicsScene::addPixmap,我可以成功添加,显示和调整图像

from PySide import QtGui
import sys
app = QtGui.QApplication(sys.argv)

scn = QtGui.QGraphicsScene()
view = QtGui.QGraphicsView(scn)

pixmap = QtGui.QPixmap("image.png")
gfxPixItem = scn.addPixmap(pixmap)

view.fitInView(gfxPixItem)
view.show()

sys.exit(app.exec_())

非工作版本:

但是,如果不是使用QGraphicsScene :: addPixmap,我首先创建一个QGraphicsPixmapItem并使用QGraphicsScene :: addItem将其添加到场景中我得到一个段错误

from PySide import QtGui
import sys

app = QtGui.QApplication(sys.argv)
scn = QtGui.QGraphicsScene()
view = QtGui.QGraphicsView(scn)

pixmap = QtGui.QPixmap("image.png")
pixItem = QtGui.QGraphicsPixmapItem(pixmap)
gfxPixItem = scn.addItem(pixItem)

view.fitInView(gfxPixItem) # Crashes,see below for call stack in OSX
view.show()

sys.exit(app.exec_())

我在OSX以及Linux上尝试过这个,结果相同.
我在这做错了什么?

我需要第二种方法的原因是我可以将QGraphicsPixmapItem子类重新实现mouseEvent函数.

这是崩溃的线程:

0   QtGui               0x000000011073bb52 QGraphicsItem::isClipped() const + 4
1   QtGui               0x0000000110779ad6 QGraphicsView::fitInView(QGraphicsItem const*,Qt::AspectRatioMode) + 32
2   QtGui.so            0x000000010f72333d Sbk_QGraphicsViewFunc_fitInView + 1153
3   org.python.python   0x000000010f2895a9 PyEval_EvalFrameEx + 9244
4   org.python.python   0x000000010f287147 PyEval_EvalCodeEx + 1934
5   org.python.python   0x000000010f2869b3 PyEval_EvalCode + 54
6   org.python.python   0x000000010f2c2c70 0x10f270000 + 339056
7   org.python.python   0x000000010f2c2d3c PyRun_FileExFlags + 165
8   org.python.python   0x000000010f2c2726 PyRun_SimpleFileExFlags + 410
9   org.python.python   0x000000010f2e6e27 Py_Main + 2715
10  libdyld.dylib       0x00007fff861b47e1 start + 1

解决方法

QGraphicsScene :: addItem(QGraphicsItem * item)返回void,因此gfxPixItem为None.当您尝试调用view.fitInView(None)时,它会导致崩溃.

更正代码

pixmap = QtGui.QPixmap("image.png")
pixItem = QtGui.QGraphicsPixmapItem(pixmap)
scn.addItem(pixItem)
view.fitInView(pixItem)

猜你在找的CSS相关文章