Demo的效果

资源占用还能接受

运行久一点内存就下去了


下面是Demo的代码

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QRect>
#include<QDateTime>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    this->drawpixmap();//先画画布,再初始化窗口
    ui->setupUi(this);

    this->setWindowTitle(tr("Deom"));
    timer=new QTimer(this);
    timer->start();//每秒触发一次
    connect(timer,SIGNAL(timeout()),this,SLOT(update()));
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::paintEvent(QPaintEvent *event)
{
    //手动双缓冲
    QPainter paint(this);
    paint.setRenderHint(QPainter::Antialiasing,true);//反走样处理打开
    //在50,50的位置画入画布/所以圆点位置在窗口的160,160
    paint.drawPixmap(,,*pix);
    recttext=,,,);

    QTime time=QDateTime::currentDateTime().time();
    int hour=time.hour();
    int minute=time.minute();
    int second=time.second();

    )
    {
        paint.drawText(*recttext,Qt::AlignTop|Qt::AlignHCenter,"PM");

    }
    else
    {
        paint.drawText(*recttext,Qt::AlignTop|Qt::AlignHCenter,"AM");
    }

    QTransform transformminute;
    //以圆点坐标160,160做旋转中心
    //画时分秒针
    transformminute.translate(,);
    transformminute.rotate(minute*+0.1*second);
    paint.setTransform(transformminute);
    paint.drawLine(-,-6,,);

    QTransform transformsecond;
    transformsecond.translate(,);
    transformsecond.rotate(*second);
    paint.setTransform(transformsecond);
    paint.drawLine(-,-8,,);

    QTransform transformhour;
    transformhour.translate(,);
    transformhour.rotate(*hour+0.5*minute);//忽略秒对时针的摆
    paint.setTransform(transformhour);
    paint.drawLine(-,-,,);

}

void MainWindow::drawpixmap()
{
    //画布大小220*220
    pix=,);
    //用窗口背景色填充画布背景
    pix->fill(this->palette().background().color());
    QPainter paint(pix);
    paint.setRenderHint(QPainter::Antialiasing,true);//反走样处理打开
    //画圆
    //圆心为110,110
    paint.drawEllipse(,,,);
    //这个rect适用于旋转和画数字刻度的
    QRect* rect=,-,,);
    QTransform tran;
    //以圆心为旋转中心
    tran.translate(,);
    ;i<=;i++)
    {
        //总共12个刻度,12段,每段30度
        tran.rotate();
        paint.setTransform(tran);
        //绘制数字刻度,垂直最上,水平居中,
        paint.drawText(*rect,Qt::AlignTop|Qt::AlignHCenter,QString::number(i));
        //绘制线条刻度,
        paint.drawLine(,-,,-);
    }
    //画圆点
    paint.setBrush(Qt::black);
    paint.drawEllipse(-,-,,);

}

API的使用


定义绘制工具paint的绘制对象是this

QPainter paint(this);

定义一个QTransform

QTransform transformsecond;

这里把旋转中心设定为绘制对象160,160的位置的同时,绘制时也会把160,160作为绘制工具的原点0,0

transformsecond.translate(,);

绘制出来的图像会以设定的顺时针旋转30度显示

 transformsecond.rotate();

设置到paint绘制工具上

 paint.setTransform(transformsecond);

在绘制对象原点的0,-60上画线,因为绘制工具的原点转移到绘制对象160,160,所以实际上是在绘制对象的(160,100)到(160,160)处画线

paint.drawLine(,-,,);

demo源码链接:http://pan.baidu.com/s/1c0qLRFE

QT时钟绘制的更多相关文章

  1. canvas自适应圆形时钟绘制

    前面的话 前面介绍过canvas粒子时钟的绘制,本文将详细介绍canvas自适应圆形时钟绘制 效果演示 最终自适应圆形时钟的效果如下所示 功能分析 下面来分析一下该圆形时钟的功能 [1]静态背景 对于 ...

  2. 环形进度条的实现方法总结和动态时钟绘制(CSS3、SVG、Canvas)

    缘由: 在某一个游戏公司的笔试中,最后一道大题是,“用CSS3实现根据动态显示时间和环形进度[效果如下图所示],且每个圆环的颜色不一样,不需要考虑IE6~8的兼容性”.当时第一想法是用SVG,因为SV ...

  3. QT界面绘制学习记录

    1. MVC结构中,model必须作为类的成员变量存在,不可再函数内部申明.否则,会出现函数调用结束,model找不到的错误. 2.QcomboBox可设置为左边空白,右侧一小箭头的形式.代码:com ...

  4. Qt如何绘制(简单深刻,fearlazy的系列文章)

    我觉得绘制只需要考虑几个问题.简单地说就是谁在什么地方画什么? 在Qt中可以这么回答:QPainter在QPainterDevice中画想画的东西. 举个例子:用QtCreator向导新建一个项目,基 ...

  5. Canvas - 时钟绘制

    导语:距离上一次写canvas,已经过去两年半,如今业务需要,再次拾起,随手记录. [思考] 时钟的绘制主要在于圆的绘制:1. 使用context.arc()方法直接绘制圆或圆弧: 2. 使用圆的方程 ...

  6. 使用Qt开发绘制多个设备的流量曲线图(附带项目图)

    一.说明: 在实际项目中,主要是使用Qt开发CS程序,当然主要是客户端.公司项目中有这个需求是实时显示多个设备的流量曲线图,设备将流量信息发给服务端,服务端再将信息通过Socket发给Qt客户端,Qt ...

  7. QT OpenGL绘制三维图形(立方体、圆柱体、圆锥、球体、圆环等等)

    本文使用QGLWidget来绘制各种三维基本图形,包括立方体.圆柱体.圆锥.球体.圆环等等,涉及包括基本绘制以及上色.纹理.旋转等操作. 使用的软件版本:QT5.12 + QT Creater4.8. ...

  8. 初识Qt文字绘制

    1.新建一个Qt Gui应用,项目名称为myDraw,基类选择为QMainWindow,类名设置为MainWindow. 2.在mainwindow.h头文件中添加void paintEvent(QP ...

  9. 采用Qt快速绘制多条曲线(折线),跟随鼠标动态显示线上点的值(基于Qt的开源绘图控件QCustomPlot进行二次开发)

    QCustomPlot是一个开源的基于Qt的第三方绘图库,能够绘制漂亮的2D图形. QCustomPlot的官方网址:https://www.qcustomplot.com/ 从官网下载QCustom ...

随机推荐

  1. iOS7 文本转语音 AVSpeechSynthesizer -转载-

    http://www.cnblogs.com/qingjoin/p/3160945.html iOS7 的这个功能确实不错.我刚试了下,用官方提供的API ,简单的几句代码就能实现文本转语音! Xco ...

  2. SWT经常使用组件

    1button组件(Button) (1)Button组件经常使用样式 SWT.PUSHbutton SWT.CHECK多选button SWT.RADIO单选button SWT.ARROW箭头bu ...

  3. python 基础 1.6 python 帮助信息及数据类型间相互转换

      一. 帮助信息   # dir() 方法  查看函数的方法   # help()   # type() 查看类型   name = raw_input('please input you name ...

  4. JS中try.. catch..的用法

    try 测试代码块的错误. catch 语句处理错误. throw 创建并跑出错误. try { //在这里运行代码 抛出错误 } catch(err) { //在这里处理错误 } 下面是一个实例: ...

  5. mysql的分库分表

    1 什么是分库分表 这里讨论的情况是一台机器上对应一个数据库. 分库的对象是表,分表的对象是行.分库是说把属于同一个模块的相关性很高的表放在同一个数据库中.分表是说把同一个表的的行分成多个子表,把各个 ...

  6. java参数的值传递和引用传递

    今天抽了点时间继续啃java核心基础,即使出来做web挺长时间了,始终觉得基础极其重要. 遇到了java参数的传递类型,豁然开朗之时不忘写下记录. java中采用的总是值传递,包括对对象参数的传递,采 ...

  7. java读取TXT文件中的数据

    将文件放在一个指定的磁盘目录下: File file = new File("指定的文件路径"); try{ BufferedReader br = new BufferedRea ...

  8. AR模型脱卡,unity端实现步骤详情

    AR模型脱卡unity端实现具体步骤 AR模型脱卡的原理 利用一些unity端AR插件做AR应用.通常会有一个需求,当识别物消失的时候,将3D模型从识别物这个父物体上移除,显示在屏幕中央.那么原理就显 ...

  9. EASYARM-IMX283 编译uboot和uImage

    本文是按照IMX283配套光盘的流程重新编译uboot和uImage将光盘中的gcc-4.4.4-glibc-2.11.1-multilib-1.0_EasyARM-iMX283.tar.bz2 解压 ...

  10. Spring Boot2.0之 整合JDBC

    很入门的知识,大家了解下就OK maven配置文件pom: spring: datasource: url: jdbc:mysql://localhost:3306/test username: ro ...