gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 01:23:05 26 4
gpt4 key购买 nike

我正在尝试将图像添加到 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 将其添加到场景中 我得到一个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 为 None。当您尝试调用 view.fitInView(None) 时,它会导致崩溃。

更正后的代码:

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

关于python - 使用 QGraphicsScene::addItem 将 QPixmap 项添加到 QGraphicsScene 会导致 PySide 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16997729/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com