QT += widgets
QT += core HEADERS += \
mainwindow.h SOURCES += \
mainwindow.cpp \
main.cpp
#ifndef MAINWINDOW_H
#define MAINWINDOW_H #include <QWidget> class Clock : public QWidget
{
Q_OBJECT //每个从QT继承的类都添加这个宏定义
public:
Clock(QWidget* parent = );//默认父对象为0,也就是当前窗口为顶级窗口
protected:
void paintEvent(QPaintEvent* e) Q_DECL_OVERRIDE;//只要是覆盖就推荐使用该宏定义
}; #endif // MAINWINDOW_H
#include "mainwindow.h"
#include <QTimer>
#include <QPoint>
#include <QColor>
#include <QTime>
#include <QPainter> //默认参数只在申明时写,定义时不写,将默认参数传递给基类QWidget
Clock::Clock(QWidget *parent):QWidget(parent)
{
QTimer* timer = new QTimer(this);//定时器 //每隔一定时间刷新界面
connect(timer,SIGNAL(timeout()),this,SLOT(update())); timer->start(); setWindowTitle(tr("小小时钟")); resize(,);
} //没有使用到形参,那么定义的时候就不需要指明形参名字
void Clock::paintEvent(QPaintEvent *)
{
//三点围成一个时针
const QPoint hourPoint[]=
{
QPoint(,),
QPoint(-,),
QPoint(,-)
};
//三点围成一个分针
const QPoint minPoint[]=
{
QPoint(,),
QPoint(-,),
QPoint(,-)
};
//三点围成一个秒针
const QPoint secPoint[]=
{
QPoint(,),
QPoint(-,),
QPoint(,-)
};
//分别定义时分秒针的颜色和透明度
QColor hourColor(,,);
QColor minColor(,,,);
QColor secColor(,,); //获取窗体的宽和高的函数首字母是小写
int side = qMin(width(),height()); //获取当前时间
QTime time = QTime::currentTime(); //创建画家
QPainter painter(this); //抗锯齿
painter.setRenderHint(QPainter::Antialiasing); //将坐标移动到客户区中间
painter.translate(width()/,height()/); //设置刻度单位为较短的一边的长度的200分之1
//一定要记得加小数点,否则内面小于200时,就会单位刻度为0
painter.scale(side/200.0,side/200.0); //设置画笔和画刷
painter.setPen(Qt::NoPen);
painter.setBrush(hourColor); //保存画家,和restore()成对使用,保存还没有旋转的画家
painter.save();
//旋转坐标轴
painter.rotate( *(time.hour()+time.minute()/60.0) ); //画多边形
painter.drawConvexPolygon(hourPoint,); //还原画家,和save()成对使用,还原到还没有旋转的画家
painter.restore(); //设置画笔,用来画小时刻度
painter.setPen(hourColor); //旋转12次画小时刻度
for(int i=;i<;i++)
{
painter.drawLine(,,,);
painter.rotate();
} //设置分钟,画刷,画笔
painter.setPen(Qt::NoPen);
painter.setBrush(minColor); //保存旋转之前的画家
painter.save(); //通过旋转坐标轴画分针
painter.rotate(*(time.minute()+time.second()/60.0));
painter.drawConvexPolygon(minPoint,); //还原画家到未旋转的状态
painter.restore(); //设置画笔颜色,用来画分钟刻度
painter.setPen(minColor); //通过旋转60次画分钟刻度
for(int i=;i<;i++)
{
if(i%!=)
painter.drawLine(,,,);
painter.rotate();
} //设置画笔画刷,用来画秒针
painter.setPen(Qt::NoPen);
painter.setBrush(secColor); //保存未旋转的画家
painter.save(); //旋转坐标轴用来画秒针
painter.rotate(*time.second());
painter.drawConvexPolygon(secPoint,); //还原画家到未旋转的状态
painter.restore();
}
#include <QApplication>
#include "mainwindow.h" int main(int argc , char* argv[])
{
QApplication app(argc ,argv); Clock clock ;
clock.show(); return app.exec(); }

QT-Demo-Colck-01的更多相关文章

  1. 虹软人脸识别——官方 Qt Demo 移植到 Linux

    一.前言 最近需要在 Linux 平台下开发一个人脸识别相关的应用,用到了虹软的人脸识别 SDK.之前在 Windows 平台用过,感觉不错,SDK 里面还带了 Demo 可以快速看到效果.打开 Li ...

  2. Qt Demo Http 解析网址 Openssl

    今天练习了一下Qt 解析http协议,在Demo中使用到了Openssl 一上午的时间都是编译openssl,不过还是没有成功,很遗憾,这里整理了有关这个Demo的本件 网盘连接:见下方评论吧,长传太 ...

  3. 读Qt Demo——Basic Layouts Example

    此例程主要展示用代码方式创建控件并用Layout管理类对其进行布局: 例程来自Qt5.2,如过是默认安装,代码位于:C:\Qt\Qt5.2.0\5.2.0\mingw48_32\examples\wi ...

  4. [QT][DEMO] QTableWidget 设置某一列禁止编辑

    例程 : 又是好风景 : http://blog.csdn.net/qiao_yihan/article/details/46413345 关键点: 1.QTableWidgetItem 的 setF ...

  5. Python 2.7.9 Demo - 019.01.CRUD oracle by cx_Oracle

    select #coding=utf-8 #!/usr/bin/python import cx_Oracle; conn = None; cursor = None; try: conn = cx_ ...

  6. Python 2.7.9 Demo - 003.01.只允许相同缩进

    Right #!/usr/bin/python if True: print ("True"); print('Again'); else: print ("False& ...

  7. Oracle PLSQL Demo - 29.01.Function结构模板 [无入参] [有返回]

    CREATE OR REPLACE FUNCTION function_name RETURN DATE AS v_date DATE; BEGIN ; dbms_output.put_line(v_ ...

  8. Oracle PLSQL Demo - 18.01管道function[查询零散的字段组成list管道返回]

    --PACKAGE CREATE OR REPLACE PACKAGE test_141213 is TYPE type_ref IS record( ENAME ), WORK_CITY ), SA ...

  9. QT+OpenGL(01)--实现三角形渲染

    1.openglwidget.ui <ui version="4.0"> <author/> <comment/> <exportmacr ...

  10. [Part 4] 在Windows 10上源码编译PCL 1.8.1支持VTK和QT,可视化三维点云

    本文首发于个人博客https://kezunlin.me/post/2d809f92/,欢迎阅读! Part-4: Compile pcl with vtk qt5 support from sour ...

随机推荐

  1. Hive是什么!

    Hive是什么! 一直想抽个时间整理下最近的所学,断断续续接触hive也有半个多月了,大体上了解了很多Hive相关的知识.那么,一般对陌生事物的认知都会经历下面几个阶段: 为什么会出现?解决了什么问题 ...

  2. eclipse中myBatis引入

    1.添加config.xml配置文件 2.定义与数据库的数据实体映射类 3.创建操作表的是sql映射文件 即:mapper.xml 4.在配置文件config.xml中注册sql映射文件(步骤三创建的 ...

  3. node.js相关

    node node最大的特点是单线程,因此一个只能有一个任务运行,大量采用异步操作. 某一个任务的后续操作一般采用回调函数的形式 var callback = function (error, val ...

  4. Android 自定义View(button)

    很多的Android入门程序猿来说对于Android自定义View,可能都是比较恐惧的,但是这又是高手进阶的必经之路,所有准备在自定义View上面花一些功夫,多写一些文章.先总结下自定义View的步骤 ...

  5. android数据保存

    永久保存数据的方法:1.Shared Preferences 以键值对的形式存储基本数据类型( booleans, floats, ints, longs, and strings),存储的数据在限制 ...

  6. yiic模块module使用

    模块是一个独立的软件单元,它包含 模型, 视图, 控制器 和其他支持的组件. 在许多方面上,模块看起来像一个 应用.主要的区别就是模块不能单独部署,它必须存在于一个应用里. 用户可以像他们访问普通应用 ...

  7. head,tail,cat,more,less

    tail FILE -n 4,查看文件最后4行内容head FILE -n 10,查看文件最前4行内容 使用cat more less都可以查看文本内容,但是它们三者有什么区别呢?more和less的 ...

  8. 理解JavaScript中的事件处理 阻止冒泡event.stopPropagation();

    原文地址:http://www.cnblogs.com/binyong/articles/1750263.html 这篇文章对于了解Javascript的事件处理机制非常好,将它全文转载于此,以备不时 ...

  9. [饭后算法系列] "头尾移动" 排序列表

    1. 问题 一个乱序列表(list), 只支持两种操作: 把一个元素移动到头部, 或者把一个元素移动到尾部. 需要设计一种算法, 使得移动次数最少而使列表有序 举两个例子: 1. {3,5,7,1,9 ...

  10. idea 14运行java工程报错-Dmaven.multiModuleProjectDirectory system propery is not set. Check $M2_HOME environment variable and mvn script match.

    报错信息:Disconnected from the target VM, address: '127.0.0.1:59770', transport: 'socket' -Dmaven.multiM ...