这个例子演示了如何使用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,还原了旋转之前的画笔的变换矩阵,后面的绘制不会被这次旋转所影响。