您的 for 循环不正确并导致程序崩溃(我确定这不是您的错)。它应该这样写:
for(int i = 0; i < 100; i+=5){
p.drawLine(QPointF(i,0),QPointF(i,max));
}
即分配增量。这样,它将完成工作并正确完成。
在旁注中,我建议使用drawPixmap()
而不是 setPixmap()
. 但setPixmap()
不会导致无限递归,例如下一个代码可以正常工作。
//...
this->setPixmap(QPixmap("G:/2/qt.jpg"));
QLabel::paintEvent(event);
为什么?使用这种方法永远不会产生无限递归(参见此处):
如果你在一个本身可能从paintEvent()调用的函数中调用repaint(),你可能会得到无限递归。update() 函数永远不会导致递归。
确实setPixmap()
叫update()
,不是repaint()
。证明看源码:
setPixmap 来源:
void QLabel::setPixmap(const QPixmap &pixmap)
{
Q_D(QLabel);
//...
d->updateLabel();//what it does?
}
更新标签来源:
void QLabelPrivate::updateLabel()
{
Q_Q(QLabel);
//...
q->updateGeometry();
q->update(q->contentsRect());//not repaint
}
正如我所说,这不是一个错误,但我认为如果你能做所有你需要的事情会更好QPainter
。