【Qt官方例程学习笔记】Analog Clock Window Example (画笔的平移/旋转/缩放应用)

这个例子演示了如何使用QPainter的转换和缩放特性来简化绘图。

值得学习的:

定时器事件ID检查:

在定时器事件中检查定时器id是比较好的实践。

QPainter抗锯齿:

We call QPainter::setRenderHint() with QPainter::Antialiasing to turn on antialiasing. This makes drawing of diagonal lines much smoother.

画笔的平移/缩放:

      p->translate(width() / 2, height() / 2);

      int side = qMin(width(), height());
      p->scale(side / 200.0, side / 200.0);

这段代码中, p是一个QPainter实例,使用translate()将画笔移动到中心点,然后通过scale将画笔以200*200的尺寸为基准缩放(比如绘图区域大小是400*400,则缩放因子为2。这样就是绘制的时候,大小固定为200*200,绘制后,缩放到400*400).

画笔的轮廓和填充:

      p->setPen(Qt::NoPen);
      p->setBrush(hourColor);

画笔状态的保存和恢复,旋转,绘制多边形:

      QTime time = QTime::currentTime();

      p->save();
      p->rotate(30.0 * ((time.hour() + time.minute() / 60.0)));
      p->drawConvexPolygon(hourHand, 3);
      p->restore();

这段代码,通过save和restore,还原了旋转之前的画笔的变换矩阵,后面的绘制不会被这次旋转所影响。

 

 

 

 

上一篇:POJ 3526 The Teacher’s Side of Math 题解《挑战程序设计竞赛》


下一篇:P2952 [USACO09OPEN]牛线Cow Line