我正在研究和修改冰箱磁铁示例,我尝试做的最后一件事是绘制一些应该在背景上的标签和线条。
在环顾四周试图弄清楚如何绘制标签和线条之后,我了解到我可以覆盖 QWidget 的 paintEvent() 来完成它。但是,在我这样做之后,应用程序变得迟钝,我发现这是因为在看似无限的循环中调用了paintEvent()。
为了弄清楚如何解决这个问题,我将绘制标签和线条的代码移到了类的构造函数中。不过,只有标签是在应用程序上绘制的。之后,我将标签留在了构造函数中,但将绘制线条的代码移回了paintEvent()。它起作用了,线条按预期绘制,并且仅在拖动东西时才调用paintEvent()。
为什么没有在构造函数上绘制线条,为什么paintEvent() 会进入无限循环?
这是应该绘制标签和线条的片段:
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);
}