[英]Qt paintEvent crashes
我試圖在我的小部件上繪制簡單的板。
當我試圖自動化時,我的paintEvent崩潰了。 我認為它是由for循環引起的,我是對的嗎? 如何以其他方式繪畫?
void Widget::paintEvent(QPaintEvent *event)
{
QPixmap myPix( QSize(20,20) );
QPainter painter(this);
for(int i = 0; i < 100; i+5){
painter.drawLine(QPointF(i,0),QPointF(i,max));
}
this->setPixmap(myPix);
}
你的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()
。 要證明看到源代碼:
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
做你需要的所有東西會更好。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.