QT时钟绘制
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时钟绘制的更多相关文章
- canvas自适应圆形时钟绘制
前面的话 前面介绍过canvas粒子时钟的绘制,本文将详细介绍canvas自适应圆形时钟绘制 效果演示 最终自适应圆形时钟的效果如下所示 功能分析 下面来分析一下该圆形时钟的功能 [1]静态背景 对于 ...
- 环形进度条的实现方法总结和动态时钟绘制(CSS3、SVG、Canvas)
缘由: 在某一个游戏公司的笔试中,最后一道大题是,“用CSS3实现根据动态显示时间和环形进度[效果如下图所示],且每个圆环的颜色不一样,不需要考虑IE6~8的兼容性”.当时第一想法是用SVG,因为SV ...
- QT界面绘制学习记录
1. MVC结构中,model必须作为类的成员变量存在,不可再函数内部申明.否则,会出现函数调用结束,model找不到的错误. 2.QcomboBox可设置为左边空白,右侧一小箭头的形式.代码:com ...
- Qt如何绘制(简单深刻,fearlazy的系列文章)
我觉得绘制只需要考虑几个问题.简单地说就是谁在什么地方画什么? 在Qt中可以这么回答:QPainter在QPainterDevice中画想画的东西. 举个例子:用QtCreator向导新建一个项目,基 ...
- Canvas - 时钟绘制
导语:距离上一次写canvas,已经过去两年半,如今业务需要,再次拾起,随手记录. [思考] 时钟的绘制主要在于圆的绘制:1. 使用context.arc()方法直接绘制圆或圆弧: 2. 使用圆的方程 ...
- 使用Qt开发绘制多个设备的流量曲线图(附带项目图)
一.说明: 在实际项目中,主要是使用Qt开发CS程序,当然主要是客户端.公司项目中有这个需求是实时显示多个设备的流量曲线图,设备将流量信息发给服务端,服务端再将信息通过Socket发给Qt客户端,Qt ...
- QT OpenGL绘制三维图形(立方体、圆柱体、圆锥、球体、圆环等等)
本文使用QGLWidget来绘制各种三维基本图形,包括立方体.圆柱体.圆锥.球体.圆环等等,涉及包括基本绘制以及上色.纹理.旋转等操作. 使用的软件版本:QT5.12 + QT Creater4.8. ...
- 初识Qt文字绘制
1.新建一个Qt Gui应用,项目名称为myDraw,基类选择为QMainWindow,类名设置为MainWindow. 2.在mainwindow.h头文件中添加void paintEvent(QP ...
- 采用Qt快速绘制多条曲线(折线),跟随鼠标动态显示线上点的值(基于Qt的开源绘图控件QCustomPlot进行二次开发)
QCustomPlot是一个开源的基于Qt的第三方绘图库,能够绘制漂亮的2D图形. QCustomPlot的官方网址:https://www.qcustomplot.com/ 从官网下载QCustom ...
随机推荐
- Java 获取本地IP地址
private static String getIpAddress( ){ String ip = ""; Collection<InetAddress> colIn ...
- 【Atheros】禁用CSMA之后pktgen发包一分钟后无法发送的问题
无线网络中各个节点不断地广播信标帧,收到某节点的信标帧之后才知道这个节点存在,知道它的网络配置是怎么样的,才能知道应该怎么和它通信. 那么问题来了,禁用了CSMA之后,发送节点全力发送,那么它会永远占 ...
- 【LeetCode】Balanced Binary Tree 解题报告
[题目] Given a binary tree, determine if it is height-balanced. For this problem, a height-balanced bi ...
- CAS实现单点登录理解
CAS 是 Yale 大学发起的一个企业级的.开源的项目,旨在为 Web 应用系统提供一种可靠的单点登录解决方法(属于 Web SSO ),CAS 开始于 2001 年, 并在 2004 年 12 月 ...
- myql 5.6 安装
环境: centos 6.5 192.168.9.28 4核4G 虚拟机 一. 安装编译源码所需要的工具和库 [root@localhost ~]# yum -y install gcc gcc- ...
- 【BZOJ3601】一个人的数论 高斯消元+莫比乌斯反演
[BZOJ3601]一个人的数论 题解:本题的做法还是很神的~ 那么g(n)如何求呢?显然它的常数项=0,我们可以用待定系数法,将n=1...d+1的情况代入式子中解方程,有d+1个方程和d+1个未知 ...
- 【BZOJ3489】A simple rmq problem kd-tree
[BZOJ3489]A simple rmq problem Description 因为是OJ上的题,就简单点好了.给出一个长度为n的序列,给出M个询问:在[l,r]之间找到一个在这个区间里只出现过 ...
- HTML 学习笔记 JQuery(DOM 操作3)
设置和获取HTML 文本 和 值 1.html()方法 类似于JavaScript中的innerHTML属性,可以用来读取或者设置某个元素中的HTML内容 例子 <html> <he ...
- [2018-12-18]ABP中的AsyncCrudAppService介绍
前言 自从写完上次略长的<用ABP入门DDD>后,针对ABP框架的项目模板初始化,我写了个命令行工具Abp-CLI,其中子命令abplus init可以从github拉取项目模板以初始化项 ...
- 初学OpenMP
这两天在看多核计算的书,就要用到openmp,因为我使用vs2015,从微软可以看到是支持openmp2.0版本的 具体使用: 在vs里创造一个控制台项目,然后打开属性管理器,在属性管理器里找到配置属 ...