对QGraphicsLayoutItem进行子类化以显示像素图

时间:2013-06-30 22:07:57

标签: python qt pyside

我试图让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科学家,我如何实现这一目标。

1 个答案:

答案 0 :(得分:1)

graphicsItem不是虚拟的。这就是Qt没有称之为的原因。您似乎需要在构造函数中调用setGraphicsItem并从类中删除graphicsItemsetGraphicsItem方法。重新实现非虚函数没有任何意义。