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. JQUERY1.9学习笔记 之基本过滤器(三)偶数选择器

    偶数选择器 jQuery( ":even" ) 例:查询偶数个表格的行. <!DOCTYPE html><html lang="zh-cn"& ...

  2. Div在BOdy中居中

    <h1 style="position: absolute; width: 500px; height:200px; left:%; top:%; margin-left:-250px ...

  3. Python实现类似switch...case功能

    最近在使用Python单元测试框架构思自动化测试,在不段的重构与修改中,发现了大量的if...else之类的语法,有没有什么好的方式使Python具有C/C#/JAVA等的switch功能呢? 在不断 ...

  4. jQuery CSS3 照片墙

    <html> <head> <style type="text/css"> .picture-wall-container{ position: ...

  5. UI、ID、UE和GUI,这些都是什么

    在网页和应用设计领域中,我们经常会听到人们用这些英文缩写描述设计工作,那么它们各自代表什么含义?具体的工作.方向和区别是什么呢? 下面让我们先来看看它们的英文全称和基本概念. UI(User Inte ...

  6. 转:Raspberry Pi(树莓派)试用小记

    近期入手一树莓派卡片机,体验了一下它的强大,写篇报告,推广一下哈! 机器截图: 基础参数: CPU:700 MHz, ARM11 内存:512M(还有一种是256M的) 支持GPU加速(高清视频无压力 ...

  7. XP系统显示文件夹选项属性被删除解决注册表

    Title:XP系统显示文件夹选项属性被删除解决注册表 -- 2010-11-18 13:17 昨天中了个毒窝,还有恶意软件,十分不爽. 开始恶意软件把显示所有文件夹给删除了,去找了个注册表,重新注册 ...

  8. Yii创建前台和后台登录表单和通过扩展 CWebUser 增加信息到 Yii::app()->user

    我参考了这篇文章来构建项目的前台和后台的目录结构.感谢Andy的这篇文章.按照所有的步骤,您将有单独的前台和后台面板,如: http://localhost/index.php // 前台 http: ...

  9. vsftpd,tftp安装配置

    一. 对比共同点:都包含ftp不同点:1)vsftpd是一款在Linux发行版中最受推崇的FTP服务器程序.你可以通过ftp客户端上传下载软件.可设置访问用户名密码,或匿名anonymous登陆.默认 ...

  10. HDOJ 1279 验证角谷猜想

    Problem Description 数论中有许多猜想尚未解决,其中有一个被称为"角谷猜想"的问题,该问题在五.六十年代的美国多个著名高校中曾风行一时,这个问题是这样描述的:任何 ...