QT_简单时钟设计_看起来像那么回事高端大气上档次?

1、制作前

今天写个自己做的小时钟,这是在放假在家的一个晚上,发现房间里的时钟看着很不舒服,首先:
1、没有夜光,半夜起来了想看时间不知道几点
2、每走一秒秒针发出的声音哒哒哒的很大,嘈杂环境感觉不到,但是关灯后准备入睡声音尤其清楚
3、最重要的一点,钟表没电了一时间我找不到5号电池

2、QT

用QT制作一个简单的时钟,开着我的笔记本在那里开一个晚上就行,所以开QT弄了个简单的时钟(主要我记得在QT的例子里有个时钟的小样,所以代码可以直接参考,省了不少功夫)

3、成品

网上找了些好看的照片作为背景,自己用画板画了个表盘和各个指针,最后看起来还像那么回事:)
成品展示
变个背景,是不是有那么点意思哈哈哈哈

4、后期

今天自己又打开这个程序做了些修改(无非就是改改背景,改改颜色),有考虑加些功能上去,比如弄个可以调节指针颜色的,弄个可以选择背景图片的,后来放弃了不想弄了,简单才是美,弄这个的时候就想弄个极简的,也就不想去弄那么多花里胡哨的功能了

5、主要代码
1、背景部分
void Widget::paintEvent(QPaintEvent *event){
    QPainter painter2(this);

    QPixmap pix;
        pix.load(":/new/prefix1/image/b_back2.jpg");//图片的位置
        painter2.drawPixmap(0,0,this->width(),this->height(),pix);//根据窗口的宽高来将图片画在窗口上
2、画布设置(有些函数是在例子中搬过来的,自己也不是很理解)
painter2.setRenderHint(QPainter::Antialiasing); //反走样?
        painter2.translate(this->width()/2,this->height()/3);  //设置后面画表盘等东西时的相对坐标的原点

        int side = qMin(this->width(), this->height());       //取较小的值?
        painter2.scale(side / 300.0, side / 300.0);           //用于窗口像素大小
3、会旋转的部分(指针 和 跟着指针的那几个小点)
static const QPointF minute_points[3] = {
              QPointF(3, -10),
              QPointF(-3, -10),
              QPointF(0, -60)
          };
        static const QPointF hour_points[3] = {
              QPointF(5, -7),
              QPointF(-5, -7),
              QPointF(0, -30)
          };
        static const QPointF second_points[3] = {
              QPointF(1, -20),
              QPointF(-1, -20),
              QPointF(0, -87)
          };
        static const QPointF one_points[3] = {
              QPointF(-4, -101),
              QPointF(4, -101),
              QPointF(0, -99)
          };

          QPen pen1,pen2;
          pen1.setColor(Qt::white);
          pen1.setStyle(Qt::SolidLine);
          painter2.setBrush(QBrush(Qt::white,Qt::SolidPattern));
          pen1.setWidth(1);
          painter2.setPen(pen1);

          QTime time = QTime::currentTime();

          painter2.save();     //保存当前画家状态
          painter2.rotate(30.0 * ((time.hour() + time.minute() / 60.0)));
          painter2.drawConvexPolygon(hour_points, 3);
          painter2.drawEllipse(QPoint(0,-93),3,3);
          painter2.restore();            //还原当前画家状态

          painter2.save();
          painter2.rotate(6.0 * (time.minute() + time.second() / 60.0));
          painter2.drawConvexPolygon(minute_points, 3);
          painter2.drawEllipse(QPoint(0,-93),2,2);
          painter2.restore();

          painter2.save();
          painter2.rotate(6.0 * (time.second() + time.msec() /1000.0));
          painter2.drawConvexPolygon(second_points, 3);
          //painter2.drawEllipse(QPoint(0,-96),1,1);
          painter2.drawConvexPolygon(one_points, 3);
          painter2.restore();
4、表盘部分
//painter2.drawEllipse(QPoint(0,0),3,3);   //中心那个小圆
          //表盘
          //秒盘
          for (int j = 0; j < 60; ++j) {
              if ((j % 5) != 0)
                  painter2.drawLine(91, 0, 95, 0);
              painter2.rotate(6.0);
          }

          for (int j = 0; j < 60; ++j) {
              if ((j % 5) != 0)
                      painter2.drawLine(93, 0, 95, 0);
                  painter2.rotate(6.0);
          }

          //十分钟位置钟盘,加长秒盘而已
          for (int i = 0; i < 12; ++i) {
              painter2.drawLine(87, 0, 95, 0);
              painter2.rotate(30.0);
          }
6、

其他部分(头文件,main函数)没有什么功能方面的,喜欢这个钟表的可以自己也做个噢

这里是资源链接

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值