【发布时间】:2010-02-25 14:32:34
【问题描述】:
我正在研究和修改fridge magnets 示例,我尝试做的最后一件事是绘制一些应该在背景上的标签和线条。
在环顾四周试图弄清楚如何绘制标签和线条之后,我了解到我可以重写 QWidget 的 paintEvent() 来做到这一点。但是在我这样做之后,应用程序变得迟钝,我发现这是因为在看似无限的循环中调用了paintEvent()。
为了弄清楚如何解决这个问题,我将绘制标签和线条的代码移到了类的构造函数中。不过,只有标签被绘制在应用程序上。之后,我将标签留在了构造函数中,但将绘制线条的代码移回了paintEvent()。它起作用了,线条按预期绘制,并且仅在拖动东西时才调用paintEvent()。
为什么没有在构造函数上画线,为什么paintEvent()会陷入死循环?
这是用来绘制标签和线条的 sn-p:
QPen pen(Qt::lightGray, 0, Qt::SolidLine, Qt::SquareCap, Qt::RoundJoin);
QPainter paint(this);
paint.setPen(pen);
int scale = 20;
for(int x=0; x<25; x++){
QString timetext= "0"+QString::number(x)+":00";
QLabel *time= new QLabel(timetext,this);
time->move(x*scale,2);
time->show();
paint.drawLine(x*scale,12,x*scale,400);
}
【问题讨论】:
标签: c++ qt infinite-loop qpainter