我正在尝试将图像添加到QGraphicsView
/QGraphicsScene
中,以便以后可以根据用户的输入在其上绘制简单的几何图形。我需要确保图像适合于QGraphicsView
,而不管其纵横比如何。为此,我使用QGraphicsView::fitInView
如果使用^{
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
,我首先创建一个^{QGraphicsScene::addItem
将其添加到场景中,则会得到一个segfault!
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
不是。当您试图调用view.fitInView(None)
时,它会导致崩溃。更正代码:
相关问题 更多 >
编程相关推荐