3

QGraphicsPixmapItem を QGraphicsLinearLayout にしようとしていました。QGraphicsPixmapItem は QGraphicsLayoutItem ではないため、これは不可能なので、後者をサブクラス化し、ピックスマップ アイテムのように機能させようとしています。

これが私の失敗した試みです:

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 科学者の皆さん、どうすればこれを達成できますか。

4

1 に答える 1

2

graphicsItem仮想ではありません。そのため、Qt はそれを呼び出しません。setGraphicsItemコンストラクターを呼び出して、クラスからメソッドgraphicsItemを削除する必要があるようです。setGraphicsItem非仮想関数を再実装しても意味がありません。

于 2013-07-01T09:24:26.017 に答える