为什么我想在我的Qt小部件上绘制的“矩形”不显示?

时间:2012-07-29 22:53:12

标签: qt draw drawrect qwidget qpainter

我基本上想在对话框窗口小部件上显示一个矩形。使用另一个问题作为参考,我尝试调整使用QLabel和绘画的框架(整个过程似乎过于复杂)。

我开始在对话框的课程中成为一名成员:

QLabel* label; 

在对话框的构造函数中:

label = new QLabel(this);
label->setGeometry(20, 50, 50, 100);

为了尝试使它工作,我给对话框一个按钮来制作"矩形"随标签创建的内容出现在小部件上。我连接了#34;按下"将此按钮发送到执行以下操作的插槽:

QPixmap pixmap(50, 100);
pixmap.fill(QColor("transparent"));
QPainter painter(&pixmap);
painter.setBrush(QBrush(Qt::black));
painter.drawRect(20, 50, 50, 100);
label->setPixmap(pixmap);
update(); 

不幸的是,当我按下按钮时,小部件中没有任何内容。我在这里错过了什么?

1 个答案:

答案 0 :(得分:1)

我用PyQt尝试了这个,它通常有效,但我对这个程序并不是100%肯定。也许你应该在致电painter.end()之前尝试致电setPixmap()画家。另外,我不确定是否应该在QWidget:paintEvent之外绘制QPixmap,绘制QImage并从中创建QPixmap可能更安全。

from PyQt4 import QtGui

app = QtGui.QApplication([])

class Test(QtGui.QWidget):
    def __init__(self):
       QtGui.QWidget.__init__(self)
       self.bn = QtGui.QPushButton("Paint")
       self.lb = QtGui.QLabel()
       layout = QtGui.QVBoxLayout(self)
       layout.addWidget(self.bn)
       layout.addWidget(self.lb)
       self.bn.clicked.connect(self.handleClick)

    def handleClick(self):
       pixmap = QtGui.QPixmap(50, 100)
       pixmap.fill(QtGui.QColor("transparent"))
       p = QtGui.QPainter(pixmap)
       p.drawRect(0,0,50-1,100-1)
       p.end()       
       self.lb.setPixmap(pixmap)

t = Test()
t.show()
app.exec_()

对于简单的绘制矩形,这当然非常复杂。我不知道你在计划什么,请注意有QGraphicsView用于绘制图形。