• qt 实现钟表图标


    1. #include "clock.h"
    2. CLOCK::CLOCK(QWidget *parent)
    3.     : QWidget(parent)
    4. {
    5.     QTimer *timer = new QTimer(this);
    6.     timer->start(1000);//一秒钟
    7.     connect(timer,SIGNAL(timeout()),this,SLOT(update()));
    8.     QFont font;
    9.     font.setPointSize(10);//字体大小设置为10
    10.     setFont(font);
    11. }
    12. CLOCK::~CLOCK()
    13. {
    14. }
    15. void CLOCK::paintEvent(QPaintEvent * /* event */)
    16. {
    17.     QPainter painter(this);
    18.     painter.setRenderHint(QPainter::Antialiasing, true);
    19.     int side = qMin(width(), height());
    20.     painter.setViewport((width() - side) / 2, (height() - side) / 2,
    21.                         side, side);
    22.     painter.setWindow(0, 0, 200, 200);/*设置(0,0)为新的坐标原点*/
    23.     draw(&painter);
    24. }
    25. void CLOCK::draw(QPainter *painter)
    26. {
    27.     QPen thickPen(palette().foreground(), 1.5);//设置刻度线为粗黑
    28.     QPen thinPen(palette().foreground(), 0.5);//设置刻度线为灰
    29.     QTime time = QTime::currentTime();
    30.     painter->translate(100,100);//重新设定坐标原点
    31.     painter->setRenderHint(QPainter::Antialiasing);//消锯齿
    32.     painter->setBrush(Qt::red);
    33.     painter->setPen(Qt::red);
    34.     painter->save();//保存坐标系,防止坐标系跑偏了
    35.     painter->rotate(6.0*time.second());//注意是6.0,不是6
    36.     painter->drawConvexPolygon(sed,4);
    37.     painter->restore();//复位之前的坐标系
    38.     painter->setBrush(Qt::blue);
    39.     painter->setPen(Qt::blue);
    40.     painter->save();
    41.     painter->rotate(6.0*(time.minute()+time.second()/60.0));
    42.     painter->drawConvexPolygon(min,4);
    43.     painter->restore();
    44.     painter->setBrush(Qt::black);
    45.     painter->setPen(Qt::black);
    46.     painter->save();
    47.     painter->rotate(30.0*(time.hour()+time.minute()/60.0));
    48.     painter->drawConvexPolygon(hour,4);
    49.     painter->restore();
    50. // //painter->drawLine(0,-98,0,-88);
    51. // for(int i=0;i<12;i++)
    52. // {
    53. // painter->rotate(30);//坐标轴旋转30度
    54. // painter->drawLine(0,-98,0,-88);
    55. // }
    56.     /*画刻度还有数字*/
    57.     for (int i = 1; i <=60; ++i) {
    58.         painter->save();
    59.         painter->rotate(6*i);//坐标轴旋转6度
    60.         if (i % 5 == 0) {
    61.             painter->setPen(thickPen);
    62.             painter->drawLine(0, -98, 0, -82);
    63.             painter->drawText(-20, -82, 40, 40,
    64.                               Qt::AlignHCenter | Qt::AlignTop,
    65.                               QString::number(i/5));
    66.         } else {
    67.             painter->setPen(thinPen);
    68.             painter->drawLine(0, -98, 0, -88);
    69.         }
    70.         //painter->rotate(-DegreesPerMinute);
    71.         painter->restore();
    72.     }
    73. }
  • 相关阅读:
    九度 1363 欢乐斗地主
    九度 1377 缓变序列
    九度 1376 最近零子序列
    转几篇关于linux下AT&T汇编的帖子
    九度 1358 陈博的平均主义
    九度 1394 五连击数组
    HDU 2817 A sequence of numbers
    HDU 1867 A + B for you again
    HDU 1753 大明A+B
    HDU 1715 大菲波数
  • 原文地址:https://www.cnblogs.com/lvdongjie/p/4494388.html
Copyright © 2020-2023  润新知