Hello World! 学习编程语言的最简单最经典的小程序,当然Qt也不例外。在学习画图时,我觉得写个时钟小程序也是个比较好的开始。在之前的《Matlab及Java小时》一文中,我也从写时钟程序作为学习画图的开始。三者之间的不同点在于,matlab是通过while循环来进行重绘,Java和Qt事件来处理。实时显示时钟,都是通过改变指针与坐标轴的相对位置来实现的。前两者都是改变指针,而Qt是旋转坐标轴。具体代码如下:

1.widget.h文件

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

private:
    Ui::Widget *ui;
protected:
    void paintEvent(QPaintEvent *event);//添加重绘事件
};

#endif // WIDGET_H

2.main.cpp

#include <QtGui/QApplication>
#include "widget.h"
#include<QTextCodec>
#include<QPainter>
#include<QtGui>
#include<QDebug>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QTextCodec::setCodecForTr(QTextCodec::codecForLocale());
    Widget w;
    w.show();

    return a.exec();
}

3.widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include<QPainter>
#include<QtGui>
#include<QDebug>
#include<QFont>

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    QTimer *timer = new QTimer(this);//创建一秒定时器
    connect(timer, SIGNAL(timeout()), this, SLOT(update()));//信号与槽关联
    timer->start(1000);
    setWindowTitle(tr("我的时钟--designed by TW"));

}

Widget::~Widget()
{
    delete ui;
}

void Widget::paintEvent(QPaintEvent *event)
{
    int side = qMin(width(), height());//获取窗口的较短边的值
    QPainter painter(this);//指定画图设备
    painter.fillRect(rect(),Qt::yellow);//设置背景色
    painter.setRenderHint(QPainter::Antialiasing);//开启抗锯齿
    painter.translate(width() / 2, height() / 2);//将坐标移到窗口正中心
    painter.scale(side / 200.0, side / 200.0);//进行缩放

    QPen pen;//设置画笔的,宽度,样式,颜色
    pen.setWidth(2);
    pen.setStyle(Qt::SolidLine);
    pen.setColor(Qt::red);

    painter.setPen(pen);
    for (int i = 0; i < 12; ++i) //画表盘时针刻度
    {
        painter.drawLine(87, 0, 95, 0);
        painter.rotate(30);//将坐标进行顺时针选择30度
    }

    pen.setWidth(1);
    pen.setColor(Qt::black);
    painter.setPen(pen);

    for (int i = 0; i < 60; ++i) //画表盘时针刻度
    {
        if(i%5!=0)
          painter.drawLine(90, 0, 95, 0);
        painter.rotate(6);
    }

    pen.setColor(Qt::black);
    painter.setPen(pen);
    QFont font("Century");
    painter.setFont(font);
    //标时刻的数值
    painter.drawText(-6,-75,tr("12"));
    painter.drawText(-3,80,tr("6"));
    painter.drawText(75,5,tr("3"));
    painter.drawText(-80,5,tr("9"));

    painter.drawArc(-3,-3,6,6,0,360*16);//画中心小圆环
    /////////////////////////////////////
    QTime time = QTime::currentTime();//获取当前系统时间
//    qDebug()<<time.hour();
//    qDebug()<<time.minute();
//    qDebug()<<time.second();

    //画时针
    painter.save();//在旋转坐标系前,保存原来坐标系
    painter.rotate(30.0 * ((time.hour() + time.minute() / 60.0)));
    pen.setColor(Qt::green);
    pen.setWidth(4);
    painter.setPen(pen);
    painter.drawLine(0,0,0,-60);
    painter.restore();//在旋转坐标系后,恢复原来坐标系
    //画分针
    painter.save();
    painter.rotate(6.0 * (time.minute() + time.second() / 60.0));
    pen.setColor(Qt::blue);
    pen.setWidth(2);
    painter.setPen(pen);
    painter.drawLine(0,0,0,-80);
    painter.restore();
    //画秒针
    painter.save();
    painter.rotate(6.0 *time.second() );
    pen.setColor(Qt::red);
    pen.setWidth(1);
    painter.setPen(pen);
    //秒针形状由两条直线和一个小圆环组成
    painter.drawArc(-3,-66,6,6,0,360*16);
    painter.drawLine(0,20,0,-60);
    painter.drawLine(0,-66,0,-85);
    painter.restore();

}

运行结果如下图:

原文:http://blog.csdn.net/tengweitw/article/details/22308627

作者:nineheadedbird

【Qt编程】Qt 小时钟的更多相关文章

  1. 【python】实现一个python编程的小时钟!

    [本实验内容] 1.GUI.PyQT5介绍2.实现此次实验效果 [一 GUI.PyQt5介绍] 1.Python简介 2.GUI介绍 几个常用的Python GUI库: (1)wxPython (2) ...

  2. Qt编程学习网站

    http://blog.csdn.net/k122769836/article/details/8637677 QT - little_su - 博客频道 - CSDN.NET Qt - 1+1=2 ...

  3. 【Qt编程】基于Qt的词典开发系列--后序

    从去年八月份到现在,总算完成了词典的编写以及相关技术文档的编辑工作.从整个过程来说,文档的编写比程序的实现耗费的时间更多.基于Qt的词典开发系列文章,大致包含了在编写词典软件过程中遇到的技术重点与难点 ...

  4. 零基础学QT编程

    吴迪.2010.1 北京航空航天大学出版社   Qt资源 CSDN QT http://bbs.csdn.net/forums/Qt/ QT编程网 http://www.qtbcw.com/ 编程论坛 ...

  5. Qt编程—去掉标题栏和设置窗口透明用法

    学习Qt编程,有时候我们很想做出好看又比较炫的画面,这时就常用到qt上的一些技巧. 这里我以一个小例子来展示qt的这些技巧,此qt编程写的,如图:(去掉标题栏和设置窗口透明后) 代码实现部分: .h文 ...

  6. qt编程入门

    面对qt编程,必须先知道qt中常用的类: QPushButton按钮类.QLabel标签类.QMessageBox对话框类.QCheckBox.QAction.QMenu.QStatusBar.QTo ...

  7. Visual Studio下Qt编程中对中文的处理

    Visual Studio下Qt编程中对中文的处理 本文为原创文章,原文地址http://www.cnblogs.com/c4isr/p/qt_develop_in_vs.html Visual St ...

  8. QT笔记(1)--QT编程环境搭建

    一.QT简介 Qt  是一个1991年由奇趣科技开发的跨平台C++图形用户界面应用程序开发框架.它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器.Qt是面向对象的框架,使用特殊 ...

  9. 在windows下的QT编程中的_TCHAR与QString之间的转换

    由于在windows下的QT编程中,如果涉及到使用微软的API,那么不可避免使用_TCHAR这些类型,因此在网上查了一下,其中一个老外的论坛有人给出了这个转换,因此在这里做一下笔记 : )#ifdef ...

  10. QT编程环境搭建

    使用QT需要QT的库以及QT creator,在QT5以后的版本中,两者已经集成,不需要单独下载了,只需要下载一个文件即可.配置步骤如下: 1.下载qt-opensource-windows-x86- ...

随机推荐

  1. python复杂网络库networkx:算法

    http://blog.csdn.net/pipisorry/article/details/54020333 Networks算法Algorithms 最短路径Shortest Paths shor ...

  2. Android反编译(未混淆的apk)

    Android反编译(未混淆的apk) 工具 dex2jar 下载地址:我的CSDN 或者 官网 jd-gui 下载地址:我的CSDN 或者 官网 反编译步骤 1. 将APK解压缩,获取classes ...

  3. XMPP 测试工具

    XMPP 测试工具(金庆的专栏 2016.10)XMPP的客户端Pidgin有个Debug Window, 可以显示所有发送和接收的xml节.但是无法发送任意的自定义节.<XMPP高级编程-使用 ...

  4. Android 玩转IOC,Retfotit源码解析,教你徒手实现自定义的Retrofit框架

    CSDN:码小白 原文地址: http://blog.csdn.net/sk719887916/article/details/51957819 前言 Retrofit用法和介绍的文章实在是多的数不清 ...

  5. Android监听屏幕解锁和判断屏幕状态

    开发后台服务的时候经常需要对屏幕状态进行判断,如果是想要监听屏幕解锁事件,可以在配置里面注册action为 android.intent.action.USER_PRESENT的广播,则可以监听解锁事 ...

  6. SQL Server性能优化——等待——SLEEP_BPROOL_FLUSH

    前言: 有一个用于历史归档的数据库(简称历史库),经过一定时间的积累,数据文件已经达到700多GB,后来决定某些数据可以不需要保留,就把这部分数据truncate了,空余出600多GB的空间,也就是说 ...

  7. EventBus详解

    EventBus详解 简介 github原文 EventBus... * simplifies the communication between components - decouples eve ...

  8. Python Skelve 库

    在Python中有一个简单的轻量级的类似于Key-value的存储型数据库,那就是Skelve.下面就来一起看一看这个库的简单的使用吧. 小例子 我本人比较喜欢从例子出发,然后再来研究这些内部的行为. ...

  9. 安卓自定义日期控件(仿QQ,IOS7)

    还记得上篇:高大上的安卓日期时间选择器,本篇是根据上篇修改而来,先看下qq中日期选择的效果: 鉴于目前还没有相似的开源日期控件,因此本人花费了一些时间修改了下之前的日期控件,效果如图: 虽说相似度不是 ...

  10. c语言求最大公约数

    求差判定法. 如果两个数相差不大,可以用大数减去小数,所得的差与小数的最大公约数就是原来两个数的最大公约数.例如:求78和60的最大公约数.78-60=18,18和60的最大公约数是6,所以78和60 ...