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. mysql时间int日期转换

    select from_unixtime(1350437720);select unix_timestamp(now());插入用 unix_timestamp(date)查询用from_unixti ...

  2. discuz php判断是手机访问还是电脑访问网站

    首先在模块处填入代码: //手机网页跳转 //如果检测到访问的浏览器为下列一个指定的移动浏览器 则返回true function is_mobile(){ $regex_match="/(n ...

  3. centos 下 apache 重启启动命令

    apache 启动 usr/local/apache243/bin/apachectl start apache 重启 usr/local/apache243/bin/apachectl restar ...

  4. php 学习路线 赵兴壮2014年4月28 日 加油

    第一阶段 第一讲,WEB基础     1.1 网站基本知识: 1.2 网络协议介绍: 1.3 B/S与C/S结构的区别: 1.4 WEB编程.网站开发技术介绍.      第二讲,网页设计     2 ...

  5. AVAudioPlayer音频播放器-备用

    IOS中有三种播放音频的方式:AVAudioPlayer.音频服务.音频队列. 此文主要讲AVAudioPlayer,其他两个请见相关文章. AVAudioPlayer在AVFoundation框架下 ...

  6. 关于nginx架构探究(3)

    Nginx 模块综述 Nginx 所有的代码都是以模块的新式组织的,包括核心模块和功能模块.Nginx加载模块的时候不想Apache一样动态加载,它是直接被编译到二进制执行文件中,所以,如果想要加载新 ...

  7. android-support-v7-appcompat下载

    http://download.csdn.net/detail/u010556601/7449661 将压缩包解压,放入sdk\extras\android\support\v7目录下 在eclips ...

  8. Google Chrome快捷键大全

    信很多朋友在使用过Google Chrome之后,就会不想回到原先使用的浏览器了,尤其是IE.没错Google Chrome的优点很多,已经获得了一大部分网友们的用户,软件志现在也是Firefox+C ...

  9. KesionCMS V6.5后台拿SHELL方法

    Title:KesionCMS V6.5后台拿SHELL方法  --2011-03-29 00:21 最近弄一个站点,是KesionCMS V6.5的WEB系统,试了下后台拿webshell方法,记下 ...

  10. Entity Framework with MySQL 学习笔记一(拦截)

    参考 : http://msdn.microsoft.com/en-us/data/dn469464.aspx EF 允许我们在发送SQL请求和返回数据时做一些拦截的动作 比如可以自定义写 log , ...