Qt实现一个简单的钟表
效果图
实现思路
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实现一个简单的钟表相关推荐
- linux qt小型计算器,Qt实现一个简单的计算器
Qt实现一个简单的计算器 作者:hackett 微信公众号:加班猿 一.UI界面版 运行效果:输入num1和num2选择+-*/点击计算即可 UI界面设计: 3个lineEdit(lineEditNu ...
- linux下Qt编写串口调试助手,如何在linux下用QT写一个简单的串口调试助手
如何在linux下用QT写一个简单的串口调试助手 QT5串口类 在QT5以前,编写串口一般使用的是qextserialport类,但在QT5之后有了QT自带的串口类SerialPort(串口基础类)和 ...
- Qt实现一个简单的编译器(软件生成器)
Qt实现一个简单的编译器(软件生成器) 本文章只记录如何用Qt实现一个简单编译器,即点击本软件中的按钮便可在另一目录中生成一个新的软件(与本软件不冲突). 文章目录 Qt实现一个简单的编译器(软件生成 ...
- 使用Qt做一个简单计算器
title: Calculator date: 2022-09-04 11:10:12 tags: [Qt, 应用, C++] typora-root-url: Calculator 使用Qt做一个简 ...
- 用Qt写一个简单的音乐播放器(三):增加界面(播放跳转与音量控制)
一.前言 在用Qt写一个简单的音乐播放器(一):使用QMediaPlayer播放音乐中,我们已经知道如何去使用QMediaPlayer播放音乐. 在用Qt写一个简单的音乐播放器(二):增加界面(开始和 ...
- QT实现一个简单计算器
QT实现一个简单计算器 学生一枚,水平有限,如有问题,还望指正 第一步 通过QT设计师绘制出界面图形,界面大致如下: 第二步 将保存的.ui文件转换为头文件,以便于自己创建的对象对其继承和使用 uic ...
- Qt 封装一个简单的LED(指示灯)控件
Qt 封装一个简单的LED(指示灯)控件 1,效果~ 所以 这个简单的LED类可以自定义大小~ 可以点亮或熄灭,也可以闪烁
- 使用Qt写一个简单的五子棋单机小游戏
使用Qt写一个简单的五子棋单机小游戏 刚学,不够专业请勿喷,有不对的地方还请指出,我渴望进步!现在贴出这个游戏我原创的所有代码.希望可以帮到有需要的人. 游戏界面: 因为后面添加了.wav的音频文件, ...
- 用Qt写一个简单的音乐播放器(六):显示歌词(正则表达式)
一.前言 在用Qt写一个简单的音乐播放器(一):使用QMediaPlayer播放音乐中,我们已经知道如何去使用QMediaPlayer播放音乐. 在用Qt写一个简单的音乐播放器(二):增加界面(开始和 ...
- 用Qt写一个简单的音乐播放器(一):使用QMediaPlayer播放音乐
一.前言 QMediaplayer可以用于解析音频文件和视频文件,继承自QMediaObject,涉及到的对象为QMediaContent.QMediaObject可以提供关于媒体内容的接入,通过UR ...
最新文章
- 比杠精网友更可怕的,是懂王同事
- OBS显示器捕获黑屏的解决方法
- CSS之创建等高列布局之二
- 关于childNodes的删除
- HeadFirst设计模式之观察者模式学习
- html跨页面提取表单,HTML页面提取参数如何通过表单传递?
- okvis odometry的安装与运行
- JavaWeb -- Jsp 自定义标签的使用
- STM32F103与MCGS的通讯
- Ubuntu安装配置sougou输入法
- 分布式文件存储SeaweedFS试用对比总结
- ESP32+AMG8833+RGB屏240*320(ST7789)红外热成像
- word-插入数学公式(mathtype)
- 制作u盘winpe启动盘_RUFUS.小巧的U盘启动盘制作工具
- 小程序生命周期_微信小程序开发日记App生命周期
- echarts图表和map地图
- 理性拥抱机器学习热潮:ML祖师爷Tom Mitchell最新洞见
- 如何下载百度云文档需要用劵下载的内容
- iphone3开发基础教程pdf
- 电子科大计算机科学与技术高考分数,2021四川省高考分数线公布,总分达不到这个数,考电子科大有点悬...