我正在尝试将图像添加到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