Я изучаю и модифицирую пример магниты на холодильник , и последнее, что я попытался сделать, это нарисовать несколько меток и линий, которые должны быть на заднем плане.
Посмотрев вокруг, пытаясь понять, как рисовать метки и линии, я понял, что могу переопределить 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);
}