6

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::addItemsegfaultが発生します。

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_())

LinuxだけでなくOSXでも試してみましたが、結果は同じでした。ここで何が間違っていますか?

2 番目のアプローチが必要な理由は、サブクラス化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
4

1 に答える 1

3

QGraphicsScene::addItem(QGraphicsItem *item)を返します。Nonevoidも同様gfxPixItemです。を呼び出そうとするとview.fitInView(None)、クラッシュが発生します。

修正されたコード:

pixmap = QtGui.QPixmap("image.png")
pixItem = QtGui.QGraphicsPixmapItem(pixmap)
scn.addItem(pixItem)
view.fitInView(pixItem)
于 2013-06-08T09:28:23.197 に答える