私は冷蔵庫の磁石の例を研究して修正していますが、最後にやろうとしたことは、背景にあるはずのラベルと線をいくつか描くことでした.
ラベルと線を描画する方法を見つけようとして周りを見回した後、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);
}