Qt绘制简单时钟

本文实例为大家分享了Qt绘制简单时钟的具体代码,供大家参考,具体内容如下

概述

(1)基本原理

利用简单的几何图形绘出表盘和指针,然后基于系统时间调整指针偏转角度达到模拟时钟的效果。
其中可以加上自己喜欢的背景资源,设计不同风格的时钟。

(2)部分函数说明

①调色和填充

painter.setBrush(Qt::red);  //设置画刷,填充颜色(红色)
painter.setPen(Qt::red);   //设置画笔,外围轮廓颜色(红色)

②抗锯齿(减少图形外围锯齿状,使线条平滑)

painter.setRenderHint(QPainter::Antialiasing,true);

③自动保存与恢复

painter.save();   //保存属性
painter.restore();  //属性恢复

核心代码

dialog.h文件

class Dialog : public QDialog
{
  Q_OBJECT

public:
  Dialog(QWidget *parent = nullptr);
  ~Dialog();

  void Dialog::paintEvent(QPaintEvent *); //函数声明

private:
  Ui::Dialog *ui;
};

头文件

#include <QPainter>
#include <QPoint>
#include <QTime>
#include <QTimer>
#include <QPixmap>
#include <math.h>

指针参数(第一个QPoint前可以加static)

QPoint sec[4]={QPoint(0,-80),QPoint(2,0),QPoint(0,8),QPoint(-2,0)};
QPoint min[4]={QPoint(0,-62),QPoint(4,0),QPoint(0,10),QPoint(-4,0)};
QPoint hour[4]={QPoint(0,-48),QPoint(5,0),QPoint(0,11),QPoint(-5,0)};

关联函数

Dialog::Dialog(QWidget *parent)
  : QDialog(parent)
  , ui(new Ui::Dialog)
{
  ui->setupUi(this);
  resize(300,300);

  QTimer * timer = new QTimer(this);
  timer->start(1000);  //确定刷新时间(此处为1000毫秒=1秒)
  connect(timer,SIGNAL(timeout()),this,SLOT(update())); //update()为自动刷新界面,使指针可以不停转动
}

绘图函数(注意:只要时、分、秒三个指针任意完成一个,则其余两个只需修改指针旋转角度规则,其余属性相同即可)

void Dialog::paintEvent(QPaintEvent *){
  QPainter painter(this);

  //时钟背景
  QRect q1(20,20,0.5*512,0.5*512);
  QRect q2(0,0,512,512);
  QPixmap map(":/b/ClockBack/clockback.png");
  painter.drawPixmap(q1,map,q2);

  QTime time=QTime::currentTime();  //调用系统时间

  //表盘
  painter.setRenderHint(QPainter::Antialiasing,true);  //抗锯齿,平滑化
  painter.setPen(QPen(Qt::white,6,Qt::SolidLine));   //调色
  painter.translate(50,50);
  painter.drawEllipse(0,0,198,198);

  //指针属性
  painter.translate(99,99);

  //秒针
  painter.setRenderHint(QPainter::Antialiasing,true);
  painter.setBrush(Qt::red);  //设置画刷,填充颜色
  painter.setPen(Qt::red);   //设置画笔,外围轮廓颜色
  painter.save();        //保存属性
  painter.rotate(6.0*time.second());
  painter.drawPolygon(sec,4);  //绘制指针(绘制几何图形函数)
  painter.restore();      //属性恢复

  //分针(同秒针)
  painter.setRenderHint(QPainter::Antialiasing,true);
  painter.setBrush(Qt::white);
  painter.setPen(Qt::white);
  painter.save();
  painter.rotate(6.0*time.minute()+time.second()/60.0);
  painter.drawPolygon(min,4);
  painter.restore();

  //时针(同秒针)
  painter.setRenderHint(QPainter::Antialiasing,true);
  painter.setBrush(Qt::black);
  painter.setPen(Qt::black);
  painter.save();
  painter.rotate(30.0*time.hour()+time.minute()/60.0);
  painter.drawPolygon(hour,4);
  painter.restore();

  //表盘刻度
  //长刻度(整点刻度)
  for(int i=1;i<=12;i++){
    painter.rotate(30);
    painter.drawLine(0,-100,0,-85);
  }

  //短刻度
  for(int i=1;i<=60;i++){
    painter.rotate(6);
    painter.drawLine(0,-94,0,-90);
  }
}

背景与效果图

1、这里分享我自己采用的背景

2、效果图

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Qt绘制时钟效果

    简述 QPainter 提供了 2D 绘图的常用操作,QTimer 提供了定时器功能,将两者相结合,可以做出很多的自定义特效绘制. 下面,来实现一个每天都要接触的东西 - 时钟.包含了常见的所有功能:时针.分针.秒针. 实现方式 由于时钟是妙级更新的,所以我们需要定时刷新,时钟本身则使用之前讲过的 QPainter 来进行绘制. 使用 QTimer 定时刷新,设置超时时间为 1000 毫秒(1 秒). 绘制时钟,通过 paintEvent() 实现,包括:时针.分针.秒针.及面板.表盘等. 绘制

  • Qt编程实现小时钟

    Hello World! 学习编程语言的最简单最经典的小程序,当然Qt也不例外.在学习画图时,我觉得写个时钟小程序也是个比较好的开始.在之前的<Matlab及Java小时>一文中,我也从写时钟程序作为学习画图的开始.三者之间的不同点在于,matlab是通过while循环来进行重绘,Java和Qt事件来处理.实时显示时钟,都是通过改变指针与坐标轴的相对位置来实现的.前两者都是改变指针,而Qt是旋转坐标轴.具体代码如下: 1.widget.h文件 #ifndef WIDGET_H #define

  • QTimer与QTime实现电子时钟

    本文实例为大家分享了QTimer与QTime实现电子时钟的具体代码,供大家参考,具体内容如下 使用QLCDNumber控件进行显示 QLCDNumber控件默认只显示5个字符,可以使用setDigitCount(int size)进行设置显示个数 使用Display(QString str) 设置显示内容 该函数拥有多个重载,字符 整型 浮点型都可以作为参数 效果图: 代码:头文件 #include <QLCDNumber> class NumClock : public QLCDNumber

  • python+PyQT实现系统桌面时钟

    用Python + PyQT写的一个系统桌面时钟,刚学习Python,写的比较简陋,但是基本的功能还可以. 功能: ①窗体在应用程序最上层,不用但是打开其他应用后看不到时间 ②左键双击全屏,可以做小屏保使用,再次双击退出全屏. ③系统托盘图标,主要参考PyQt4源码目录中的PyQt4\examples\desktop\systray下的程序 ④鼠标右键,将程序最小化 使用时需要heart.svg放在源代码同级目录下,[文件可在PyQt4示例代码目录下PyQt4\examples\desktop\

  • Qt设计时钟效果

    作为一位Qt的初学者,也是一位编程的小白,我今天想教大家如何使用Qt来设计一个时钟. 首先,我们要学习如何绘图--QPainter类 QPainter通常在一个窗口的重绘事件(paint event)的处理函数paintEvent中进行绘制.QPainter类常用的功能有以下几类: 1)设置绘图工具.包括设置画笔(setPen),设置画刷(setBrush),设置字体(setFont)以及设置背景(setBackgroundMode). 2)绘制图形和文字,如图: QPainter部分画图函数的

  • QT实现简单时钟效果

    本文实例为大家分享了QT实现简单时钟效果的具体代码,供大家参考,具体内容如下 先上效果图: 预备知识: 一.钟表实现原理 设置定时器timer,每隔1000毫秒(即1s)发送timeout()信号到槽函数update(),重绘事件函数paintEvent(QPaintEventevent) 二.钟表的绘制方法 拆分钟表:表盘 数字 刻度线 指针 paintEvent(QPaintEventevent) 1.设置定时器,时间间隔为1000毫秒,并且将定时器时间与update函数关联为信号和槽,定时

  • PyQt5使用QTimer实现电子时钟

    本文用 PyQt5 的QTimer类的两种方式实现电子时钟,供大家参考,具体内容如下 [效果图] [知识点] QTimer类提供了定时器信号/槽和单触发定时器. 它在内部使用定时器事件来提供更通用的定时器. QTimer很容易使用:创建一个QTimer,使用start()来开始并且把它的timeout()连接到适当的槽.当这段时间过去了,它将会发射timeout()信号. [实现] 1.定时器信号/槽方式 class MyTimer(QWidget): def __init__(self, pa

  • Python+Pyqt实现简单GUI电子时钟

    本文实例为大家分享了Python+Pyqt实现简单GUI电子时钟的具体代码,供大家参考,具体内容如下 突发奇想想用GUI做一个简单的电子时钟界面,利用pyqt模块也很方便,代码如下: from PyQt5.QtGui import * from PyQt5.QtCore import * from PyQt5.QtWidgets import QWidget,QApplication,QLCDNumber,QVBoxLayout,QMessageBox,QPushButton import sy

  • Qt绘制简单时钟

    本文实例为大家分享了Qt绘制简单时钟的具体代码,供大家参考,具体内容如下 概述 (1)基本原理 利用简单的几何图形绘出表盘和指针,然后基于系统时间调整指针偏转角度达到模拟时钟的效果. 其中可以加上自己喜欢的背景资源,设计不同风格的时钟. (2)部分函数说明 ①调色和填充 painter.setBrush(Qt::red); //设置画刷,填充颜色(红色) painter.setPen(Qt::red); //设置画笔,外围轮廓颜色(红色) ②抗锯齿(减少图形外围锯齿状,使线条平滑) painte

  • C语言绘制简单时钟小程序

    本文实例为大家分享了C语言绘制时钟小程序的具体代码,供大家参考,具体内容如下 先贴效果图给大家先看看 基本机制是通过获取系统的时钟去绘制图线进行展示 贴出代码 ,大家可以直接使用的 .程序我进一步的讲解 #include <graphics.h> #include <conio.h> #include <math.h> #include <time.h>   #define high 480 #define width 640 #define pi 3.14

  • Qt实现简单动态时钟

    本文实例为大家分享了Qt实现简单动态时钟的具体代码,供大家参考,具体内容如下 任务实现: 通过Qt语言使用计时器实现一个简单的动态时钟: 实现效果: 实现过程: 整体过程主要分为两个部分: 1.绘制一个表盘所需的元素:时分秒针,刻度,还可以插入钟面背景图片: 2.让所绘制的指针动起来(使用计时器并关联系统时间): 整体代码: dialog.h #ifndef DIALOG_H #define DIALOG_H #include <QDialog> QT_BEGIN_NAMESPACE name

  • C++ Qt绘制时钟界面

    首先来看一下效果: 大概就是这样子,需要注意的是,这里你需要创建一个基类为Widget的界面来绘制时钟,以至于后期你想把这个时钟放到任意一个界面,你只需要在那个界面的ui里面添加一个widget,然后将它提升为这个时钟界面,并设定它的大小. widget.h文件 #ifndef WIDGET_H #define WIDGET_H #include<math.h> #include<QResizeEvent> #include<QGroupBox> #include<

  • 使用Qt QSS绘制简单美化界面功能

    目录 使用Qt绘制一个简约美观的界面-使用QSS简单美化 基本控件布局 界面的简单美化 QSS 添加图片 方法1:添加资源 方法2:直接指定图片在计算机中的绝对 / 相对路径 使用Qt绘制一个简约美观的界面-使用QSS简单美化 基本控件布局 以绘制登录界面为例,创建一个继承自Qwidget的设计师界面类 为了使得控件排放整齐有序,可以使用layout布局进行辅助 首先,添加控件,然后按照类似css的页面布局方式,在控件下方添加一Vertical Spacer垫片,用于控制该控件与其他控件的下边距

  • 使用Swing绘制动态时钟

    本文实例为大家分享了利用Swing绘制一个动态时钟的具体代码,供大家参考,具体内容如下 效果 代码在下面,可跳过解析. 前言 编程实现一个时钟 利用Swing绘制一个时钟,只能是静态的.利用Calendar类获取当前的时分秒,然后根据数学公式绘制相应的时钟就可以了. 如果静态的时钟已经足够你使用,那么就无须用到线程的概念. 如何让时钟"动起来" 当然了,动起来肯定是不可能的,但是我们可以利用人眼的视觉,让时钟"好像动起来",其实着很简单,只要让当前的图像每隔一秒种刷

  • QT实现动态时钟

    本文实例为大家分享了QT实现动态时钟的具体代码,供大家参考,具体内容如下 首次学习QT,这次用QT实现了动态图的制作,并成功制作了一个简易的时钟,效果如图: 加快100倍效果 所用背景图,如下(素材来源于百度图片): 代码,原理如下: mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; }

  • Qt实现简易时钟

    本文实例为大家分享了Qt实现简易时钟展示的具体代码,供大家参考,具体内容如下 一.效果展示 简单实现时钟(圆盘+QLCDNumber),大小刻度,数字等. 二.实现 .pro QT += core gui greaterThan(QT_MAJOR_VERSION, 4): QT += widgets CONFIG += c++11 # The following define makes your compiler emit warnings if you use # any Qt featur

  • js+html5实现canvas绘制网页时钟的方法

    本文实例讲述了js+html5实现canvas绘制网页时钟的方法,画的是一个可用于网页的.带摆的钟表,可以通过按钮调整其大小和位置,具体实现内容如下 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Clock</title> <script type="tex

随机推荐