0

伙计们。我有一个带有像素图的 QLabel - 一个 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 回答