0

ピックスマップのPNG画像(通常はフットボールの遊び場)を含むQLabelがあり、遊び場にいくつかの長方形(ロボットを表す)を描きたいと思います. しかし、ペインターを使用して REC を描画すると、RECT は表示されましたが、画像が空白になりました。なぜ失敗したのかわかりません。何かヒントを教えていただけないでしょうか?

class FieldLabel(QtGui.QLabel):

    positionData = {"1":{"x":13,"y":20},"2":{"x":28,"y":19},"3":{"x":17,"y":21}}
    def __init__(self, image_path):
        QtGui.QLabel.__init__(self)
        self.field = QtGui.QPixmap("field.png")
        self.setPixmap(self.field.scaled(self.size(),
                                         QtCore.Qt.KeepAspectRatio))
        self.setSizePolicy(QtGui.QSizePolicy.Expanding,
                           QtGui.QSizePolicy.Expanding)
        self.setAlignment(QtCore.Qt.AlignHCenter | QtCore.Qt.AlignVCenter)


    def paintEvent(self,e):
        draw = QtGui.QPainter()
        draw.begin(self)
        draw.setBrush(QtCore.Qt.NoBrush)
        draw.setPen(QtCore.Qt.blue)
        draw.drawRect(0,0,10,10)
        draw.end()
4

1 に答える 1

1

paintEventウィジェット内のすべての描画を担当します。オーバーライドしているためQLabel、 を描画する のデフォルトの実装QPixmapは呼び出されません。

したがって、最初にQLabelペイントを実行してから、好きなようにペイントできます。

def paintEvent(self,e):
    # call the base implementation to paint normal interface
    super(FieldLabel, self).paintEvent(e)

    # then paint over it
    draw = QtGui.QPainter()
    draw.begin(self)
    draw.setBrush(QtCore.Qt.NoBrush)
    draw.setPen(QtCore.Qt.blue)
    draw.drawRect(0,0,10,10)
    draw.end()
于 2013-02-19T23:47:52.987 に答える