我试图将QGraphicsPixmapItem放入QGraphicsLinearLayout中。
由于这是不可能的,因为QGraphicsPixmapItem不是QGraphicsLayoutItem,
我试图继承后者,并使它像pixmap项目一样工作。
这是我失败的尝试:
from PySide import QtGui, QtCore
import sys
class MyItem(QtGui.QGraphicsLayoutItem):
def __init__(self, image, parent=None):
super().__init__(parent)
self.gitem = QtGui.QGraphicsPixmapItem()
self.gitem.setPixmap(QtGui.QPixmap(image))
def sizeHint(which, constraint, other):
return QtCore.QSizeF(200, 200)
def setGeometry(self, rect):
self.gitem.setPos(rect.topLeft())
def graphicsItem(self):
#does not get called
return self.gitem
def setGraphicsItem(self, item):
self.gitem = item
class Application(QtGui.QGraphicsView):
def __init__(self, parent=None):
super().__init__(parent)
gwidget = QtGui.QGraphicsWidget()
layout = QtGui.QGraphicsLinearLayout()
layout.addItem(MyItem(r'C:\image1.jpg'))
layout.addItem(MyItem(r'C:\image2.jpg'))
gwidget.setLayout(layout)
scene = QtGui.QGraphicsScene()
scene.addItem(gwidget)
self.setScene(scene)
app = QtGui.QApplication(sys.argv)
main = Application()
main.show()
sys.exit(app.exec_())
从注释中可以明显看出,没有调用graphicsItem()方法,
最终获得超白色乳白色图形视图。
亲爱的Qt科学家,我如何实现这一目标。
最佳答案
graphicsItem
不是虚拟的。这就是为什么Qt不调用它。看来您需要在构造函数中调用setGraphicsItem
并从类中删除graphicsItem
和setGraphicsItem
方法。重新实现非虚拟功能没有任何意义。
关于python - 子类化QGraphicsLayoutItem以显示像素图,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17395312/