效果图

实现思路

1.先插入一张自己喜欢的图片当背景。
2.调用绘图函数画出时针,分针,秒针。
3.调用绘图函数画出表盘。(如果图片有表盘也可以不画)
4.用QTimer设定时间,使钟表一秒钟刷新一次。

代码分享

dialog.h

#ifndef DIALOG_H
#define DIALOG_H#include <QDialog>
#include<QPen>QT_BEGIN_NAMESPACE
namespace Ui { class Dialog; }
QT_END_NAMESPACEclass Dialog : public QDialog
{Q_OBJECTpublic:Dialog(QWidget *parent = nullptr);~Dialog();void paintEvent(QPaintEvent* event);static const QPoint hourHand[4];static const QPoint minuteHand[4];static const QPoint secondHand[4];QPen hourHandPen;QPen minuteHandPen;void drawHourHand(QPainter *painter);void drawMinuteHand(QPainter *painter);void drawsecondHand(QPainter *painter);void drawClockDial(QPainter *painter);private:Ui::Dialog *ui;
};
#endif // DIALOG_H

dialog.cpp

#include "dialog.h"
#include "ui_dialog.h"
#include<QPixmap>
#include<QPainter>
#include<QTimer>
#include<QTime>
const QPoint Dialog::hourHand[4] = {QPoint(2, 10),QPoint(-2, 10),QPoint(-2, -40),QPoint(2, -40)
};
const QPoint Dialog::minuteHand[4] = {QPoint(2, 15),QPoint(-2, 15),QPoint(-2, -70),QPoint(2, -70)
};
const QPoint Dialog::secondHand[4] = {QPoint(1, 18),QPoint(-1, 18),QPoint(-1, -90),QPoint(1, -90)
};Dialog::Dialog(QWidget *parent): QDialog(parent), ui(new Ui::Dialog)
{ui->setupUi(this);hourHandPen = QPen(palette().foreground(), 2.0);//设置小时刻度线为粗黑minuteHandPen = QPen(palette().foreground(), 1.0);//设置分钟刻度线为灰QTimer *timer = new QTimer(this);timer->start(1000);//一秒钟connect(timer,SIGNAL(timeout()),this,SLOT(update()));setWindowTitle("The Clock");resize(500,500);
}Dialog::~Dialog()
{delete ui;
}
void Dialog::paintEvent(QPaintEvent *event)
{QPainter painter(this);QRect r1(0,0,500,500);QPixmap m(":/res/2_4.jpg");painter.drawPixmap(r1,m,r1);painter.translate(250,250);drawHourHand(&painter);drawMinuteHand(&painter);drawsecondHand(&painter);drawClockDial(&painter);painter.setBrush(Qt::black);painter.drawEllipse(QPoint(0,0),3,3);}
void Dialog::drawHourHand(QPainter *painter)
{QTime time = QTime::currentTime();painter->setBrush(Qt::black);painter->setPen(Qt::black);painter->save();painter->rotate(30.0*(time.hour()+time.minute()/60.0));painter->drawConvexPolygon(hourHand,4);//绘制时针painter->restore();//绘制图形后复位坐标系
}
void Dialog::drawMinuteHand(QPainter *painter)
{QTime time = QTime::currentTime();painter->setBrush(Qt::black);painter->setPen(Qt::black);painter->save();painter->rotate(6.0*(time.minute()+time.second()/60.0));painter->drawConvexPolygon(minuteHand,4);//绘制分针painter->restore();//绘制图形后复位坐标系
}
void Dialog::drawsecondHand(QPainter *painter)
{QTime time = QTime::currentTime();painter->setBrush(Qt::red);painter->setPen(Qt::red);painter->save();//保存坐标系,防止坐标系跑偏了painter->rotate(6.0*time.second());//注意是6.0,不是6painter->drawConvexPolygon(secondHand,4);//绘制秒针painter->restore();//绘制图形后复位坐标系
}
void Dialog::drawClockDial(QPainter *painter)
{//绘制钟表刻度盘和数字for (int i = 1; i <=60; ++i){painter->save();painter->rotate(6*i);//坐标轴旋转6度if (i % 5 == 0){painter->setPen(hourHandPen);painter->drawLine(0, -190, 0, -170);painter->drawText(-20, -170, 40, 40,Qt::AlignHCenter | Qt::AlignTop,QString::number(i/5));}else{painter->setPen(minuteHandPen);painter->drawLine(0, -180, 0, -170);}painter->restore();//绘制图形后复位坐标系}
}

Qt实现一个简单的钟表相关推荐

  1. linux qt小型计算器,Qt实现一个简单的计算器

    Qt实现一个简单的计算器 作者:hackett 微信公众号:加班猿 一.UI界面版 运行效果:输入num1和num2选择+-*/点击计算即可 UI界面设计: 3个lineEdit(lineEditNu ...

  2. linux下Qt编写串口调试助手,如何在linux下用QT写一个简单的串口调试助手

    如何在linux下用QT写一个简单的串口调试助手 QT5串口类 在QT5以前,编写串口一般使用的是qextserialport类,但在QT5之后有了QT自带的串口类SerialPort(串口基础类)和 ...

  3. Qt实现一个简单的编译器(软件生成器)

    Qt实现一个简单的编译器(软件生成器) 本文章只记录如何用Qt实现一个简单编译器,即点击本软件中的按钮便可在另一目录中生成一个新的软件(与本软件不冲突). 文章目录 Qt实现一个简单的编译器(软件生成 ...

  4. 使用Qt做一个简单计算器

    title: Calculator date: 2022-09-04 11:10:12 tags: [Qt, 应用, C++] typora-root-url: Calculator 使用Qt做一个简 ...

  5. 用Qt写一个简单的音乐播放器(三):增加界面(播放跳转与音量控制)

    一.前言 在用Qt写一个简单的音乐播放器(一):使用QMediaPlayer播放音乐中,我们已经知道如何去使用QMediaPlayer播放音乐. 在用Qt写一个简单的音乐播放器(二):增加界面(开始和 ...

  6. QT实现一个简单计算器

    QT实现一个简单计算器 学生一枚,水平有限,如有问题,还望指正 第一步 通过QT设计师绘制出界面图形,界面大致如下: 第二步 将保存的.ui文件转换为头文件,以便于自己创建的对象对其继承和使用 uic ...

  7. Qt 封装一个简单的LED(指示灯)控件

    Qt 封装一个简单的LED(指示灯)控件 1,效果~ 所以 这个简单的LED类可以自定义大小~ 可以点亮或熄灭,也可以闪烁

  8. 使用Qt写一个简单的五子棋单机小游戏

    使用Qt写一个简单的五子棋单机小游戏 刚学,不够专业请勿喷,有不对的地方还请指出,我渴望进步!现在贴出这个游戏我原创的所有代码.希望可以帮到有需要的人. 游戏界面: 因为后面添加了.wav的音频文件, ...

  9. 用Qt写一个简单的音乐播放器(六):显示歌词(正则表达式)

    一.前言 在用Qt写一个简单的音乐播放器(一):使用QMediaPlayer播放音乐中,我们已经知道如何去使用QMediaPlayer播放音乐. 在用Qt写一个简单的音乐播放器(二):增加界面(开始和 ...

  10. 用Qt写一个简单的音乐播放器(一):使用QMediaPlayer播放音乐

    一.前言 QMediaplayer可以用于解析音频文件和视频文件,继承自QMediaObject,涉及到的对象为QMediaContent.QMediaObject可以提供关于媒体内容的接入,通过UR ...

最新文章

  1. 比杠精网友更可怕的,是懂王同事
  2. OBS显示器捕获黑屏的解决方法
  3. CSS之创建等高列布局之二
  4. 关于childNodes的删除
  5. HeadFirst设计模式之观察者模式学习
  6. html跨页面提取表单,HTML页面提取参数如何通过表单传递?
  7. okvis odometry的安装与运行
  8. JavaWeb -- Jsp 自定义标签的使用
  9. STM32F103与MCGS的通讯
  10. Ubuntu安装配置sougou输入法
  11. 分布式文件存储SeaweedFS试用对比总结
  12. ESP32+AMG8833+RGB屏240*320(ST7789)红外热成像
  13. word-插入数学公式(mathtype)
  14. 制作u盘winpe启动盘_RUFUS.小巧的U盘启动盘制作工具
  15. 小程序生命周期_微信小程序开发日记App生命周期
  16. echarts图表和map地图
  17. 理性拥抱机器学习热潮:ML祖师爷Tom Mitchell最新洞见
  18. 如何下载百度云文档需要用劵下载的内容
  19. iphone3开发基础教程pdf
  20. 电子科大计算机科学与技术高考分数,2021四川省高考分数线公布,总分达不到这个数,考电子科大有点悬...

热门文章

  1. 高分影像批处理第一回——数据格式分析与整理
  2. Unity横版过关游戏,敌人的触发、激活问题
  3. Win7一键还原系统的方法【系统天地】
  4. Mac IDEA 自带Maven换国内源
  5. flutter打包出错了,有大神帮忙看看吗?
  6. SimpleFOC调参3-PID参数整定攻略
  7. 25-Web-京东登录界面
  8. 洛谷P1007独木桥题解
  9. OEM-ODM-OBM
  10. 【U8+】修改或删除凭证提示此分录两清