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 ...
随机推荐
- Continuously Integrate
 Continuously Integrate David Bartlett THE Build AS A "Big BAng" EvEnT in project develop ...
- EasyPlayer RTSP Windows播放器D3D,GDI的几种渲染方式的选择区别
EasyPlayer-RTSP windows播放器支持D3D和GDI两种渲染方式,其中D3D支持格式如下: DISPLAY_FORMAT_YV12 DISPLAY_FORMAT_YUY2 DISPL ...
- Elipse clean后无法编译出class文件
通常之前一直运行正常的项目,在某次修改或重新启动时总是报 ClassNotFoundException,而事实是这个类确实存在,出现这种原因最好看看 build文件下的classes是否为空 或 编译 ...
- 响应式布局【3】 --- bootstrap
本片文章主要讲解Bootstrap中如何实现响应式布局的. 参考资料&内容来源: https://code.ziqiangxuetang.com/bootstrap/bootstrap-gri ...
- Wix Burn:如何将32位和64位的安装包制作成一个安装包
由于Windows Installer不是平台独立的(即区分32-bit和64-bit),因此用Wix制作的安装包在编译不能像.net应用那样采用Any CPU编译,而必须制定是目标Platform是 ...
- Ubuntu12.04如何修改窗口背景色为眼睛保护色来保护眼睛,强力推荐!!
最近突然发现盯着屏幕看的久了,眼睛会非常的痛苦,因此想改变一下系统的窗口背景颜色.其实看代码主要是在Eclipse里面察看,因此一开始我就想改变Eclipse的文本编辑框的背景颜色,效果如下图所示. ...
- python cookbook第三版学习笔记十一:类和对象(二)调用父类的方法
在子类中调用父类的方法,可以下面的A.spam(self)的方法. class A(object): def spam(self): print 'A.spam' class ...
- 一文读懂实用拜占庭容错(PBFT)算法
在区块链中有一个著名的问题,就是拜占庭将军问题,对于拜占庭将军问题,网上的文章已经多得不要不要了,今天和大家分享的是其相关的实用拜占庭容错算法,一起来看看吧. 实用拜占庭容错算法(Practi ...
- 卸载apache服务
卸载服务,管理员身份运行命令行程序,输入 sc delete apache2.2
- poj The Settlers of Catan( 求图中的最长路 小数据量 暴力dfs搜索(递归回溯))
The Settlers of Catan Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 1123 Accepted: ...