Qt示例代码的时钟,只有时针,分针,没有秒针,而且针的形状也不好看。并且没有转轴。
代码改动一下增加上转轴
代码如下:
void AnalogClockWindow::render(QPainter *p)
{
// 构成时针的点
static const QPoint hourHand[4] = {
QPoint(7, 0),
QPoint(0, -40),
QPoint(-7, 0),
QPoint(0, 8)
};
// 构成分针的点
static const QPoint minuteHand[4] = {
QPoint(7, 0),
QPoint(0, -70),
QPoint(-7, 0),
QPoint(0, 8)
};
// 构成秒针的点
static const QPoint secondHand[4] = {
QPoint(3, 0),
QPoint(0, -90),
QPoint(-3, 0),
QPoint(0, 8)
};
QColor hourColor(127, 0, 127,191); // 时针颜色
QColor minuteColor(0, 127, 127, 191); // 分针颜色
QColor secondColor(255, 127, 127, 191); // 秒针颜色
QColor axleColor(0, 0, 0, 255); // 转轴颜色
p->setRenderHint(QPainter::Antialiasing); // 消除锯齿
p->translate(width() / 2, height() / 2); // 旋转的中心点
int side = qMin(width(), height());
p->scale(side / 200.0, side / 200.0); // 窗口大小缩小的200以内
QTime time = QTime::currentTime();
p->setPen(Qt::NoPen); // 绘制时针
p->setBrush(hourColor);
p->save();
p->rotate(30.0 * ((time.hour() + time.minute() / 60.0)));
p->drawConvexPolygon(hourHand, 4);
p->restore();
p->setPen(hourColor); // 绘制时间刻度
for (int i = 0; i < 12; ++i) {
p->drawLine(88, 0, 96, 0);
p->rotate(30.0);
}
p->setPen(Qt::NoPen); // 绘制分针
p->setBrush(minuteColor);
p->save();
p->rotate(6.0 * (time.minute() + time.second() / 60.0));
p->drawConvexPolygon(minuteHand, 4);
p->restore();
p->setPen(minuteColor); // 绘制分刻度
for (int j = 0; j < 60; ++j) {
if ((j % 5) != 0)
p->drawLine(92, 0, 96, 0);
p->rotate(6.0);
}
p->setPen(Qt::NoPen); // 绘制秒针
p->setBrush(secondColor);
p->save();
p->rotate(6.0 * time.second());
p->drawConvexPolygon(secondHand, 4);
p->restore();
p->setPen(Qt::NoPen); // 绘制转轴
p->setBrush(axleColor);
p->save();
p->drawEllipse({0,0}, 2,2);
p->restore();
}