最近抽空又看了下qt,发现用它来实现一些东西真的很容易
比如下面这个例子,绘制了个圆形的时钟,
但代码却清晰易懂[例子源自奇趣科技提供的例子]
因为清晰,所以就只写注释了,吼吼
其实也就这么几行代码
头文件

//clock.h

#ifndef CLOCK_H
#define CLOCK_H #include <QWidget> class Clock : public QWidget
{
//对于具有signal,slot机制的类需要声明
    Q_OBJECT public:
    Clock(QWidget *parent = 0); protected:
//重绘用的事件处理函式
    void paintEvent(QPaintEvent *event);
}; #endif // CLOCK_H

cpp文件

  1 #include "clock.h"
  2 
  3 
  4 #include <QtGui>
  5 
  6 #include "clock.h"
  7 
  8 Clock::Clock(QWidget *parent): QWidget(parent)
  9 {
 10 //声明一个定时器
 11     QTimer *timer = new QTimer(this);
 12 //连接信号与槽
 13     connect(timer, SIGNAL(timeout()), this, SLOT(update()));
 14     timer->start(1000);
 15 //设置窗体名称与大小
 16     setWindowTitle(tr("Clock"));
 17     resize(200, 200);
 18 
 19 }
 20 
 21 
 22 void Clock::paintEvent(QPaintEvent *)
 23 
 24 {
 25 //下面三个数组用来定义表针的三个顶点,以便后面的填充
 26     static const QPoint hourHand[3] = {
 27         QPoint(3, 8),
 28         QPoint(-3, 8),
 29         QPoint(0, -40)
 30     };
 31     static const QPoint minuteHand[3] = {
 32         QPoint(3, 8),
 33         QPoint(-3, 8),
 34         QPoint(0, -70)
 35     };
 36     static const QPoint secondHand[3] = {
 37         QPoint(3, 8),
 38         QPoint(-3, 8),
 39         QPoint(0, -90)
 40     };
 41 
 42 //填充表针的颜色
 43     QColor hourColor(127, 0, 127);
 44     QColor minuteColor(0, 127, 127, 191);
 45     QColor secondColor(127, 127,0,120);
 46 //绘制的范围
 47     int side = qMin(width(), height());
 48 //获取当前的时间
 49     QTime time = QTime::currentTime();
 50 //声明用来绘图用的“画家”
 51     QPainter painter(this);
 52 
 53     painter.setRenderHint(QPainter::Antialiasing);
 54 //重新定位坐标起始点点
 55     painter.translate(width() / 2, height() / 2);
 56 //设定花布的边界
 57     painter.scale(side / 200.0, side / 200.0);
 58 //填充时针,不需要边线所以NoPen
 59     painter.setPen(Qt::NoPen);
 60 //画刷颜色设定
 61     painter.setBrush(hourColor);
 62 //保存“画家”的状态   
 63     painter.save();
 64 //将“画家”(的”视角“)根据时间参数转移
 65     painter.rotate(30.0 * ((time.hour() + time.minute() / 60.0)));
 66 //填充时针的区域
 67     painter.drawConvexPolygon(hourHand, 3);
 68 //恢复填充前“画家”的状态    
 69     painter.restore();
 70 
 71 //下面画表示小时的刻度,此时要用到画笔(因为要划线)
 72     painter.setPen(hourColor);
 73 //十二个刻度,循环下就好了
 74     for (int i = 0; i < 12; ++i) {
 75 //没次都是这样,先画跳线,再转个角 
 76        painter.drawLine(88, 0, 96, 0);
 77         painter.rotate(30.0);
 78     }
 79 
 80 //后面的跟前面的类似,分别绘制了分针和秒针,及相应的刻度,我就不废话了
 81 
 82     painter.setPen(Qt::NoPen);
 83 
 84     painter.setBrush(minuteColor);
 85 
 86 
 87     painter.save();
 88     painter.rotate(6.0 * (time.minute() + time.second() / 60.0));
 89     painter.drawConvexPolygon(minuteHand, 3);
 90     painter.restore();
 91 
 92     painter.setPen(minuteColor);
 93 
 94     for (int j = 0; j < 60; ++j) {
 95         if ((j % 5) != 0)
 96             painter.drawLine(92, 0, 96, 0);
 97         painter.rotate(6.0);
 98     }
 99 
100 
101     painter.setPen(Qt::NoPen);
102 
103     painter.setBrush(secondColor);
104 
105     painter.save();
106     painter.rotate(6.0*time.second());
107     painter.drawConvexPolygon(secondHand,3);
108     painter.restore();
109 
110 }
111 
112 

main文件

#include <QApplication>

#include "clock.h"

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);
//声明下,再show出来就可以了
    Clock clock;
    clock.show();
    return app.exec();
}

pro文件

HEADERS       = clock.h
SOURCES       = clock.cpp \
                main.cpp

下面是运行时的截图,开发环境为qtcreator

在奇趣提供的例子中还将其做成了控件,有时间在写点关于那个例子的东西。

http://www.cnblogs.com/pingf/archive/2009/08/06/1540374.html

qt下的时钟程序(简单美丽,继承自QWidget的Clock,用timer调用update刷新,然后使用paintEvent作画就行了,超详细中文注释)good的更多相关文章

  1. QT学习 之 对话框 (四) 字体对话框、消息对话框、文件对话框、进程对话框(超详细中文注释)

    QMessageBox类: 含有Question消息框.Information消息框.Warning消息框和Critical消息框等 通常有两种方式可以来创建标准消息对话框: 一种是采用“基于属性”的 ...

  2. Linux下db2V10.5命令行安装超详细图文教程(附下载地址)

    下载地址:https://pan.baidu.com/s/1GtF03x1FMF3IsGdSiBJu-g 提取码:8vfj 失效了发邮件:wells974@163.com 一.db2prereqche ...

  3. 在使用Arduino中遇到的问题(无法使用中文注释、程序无法下载)

    在使用Arduino中遇到的问题: 在用arduino给蓝牙模块供电时,下载程序是下不进去的.即使显示下进去了,其实也是没下进去. 解决方法:拔掉蓝牙模块再下程序,或给蓝牙供电的线上加上一个开关. 在 ...

  4. QT下UDP套接字通信——QUdpSocket 简单使用

    QT下UDP套接字通信--QUdpSocket QUdpSocket类提供一个UDP套接字. UDP(用户数据报协议)是一种轻量级.不可靠.面向数据报.无连接的协议.它可以在可靠性不重要的情况下使用. ...

  5. Qt编写串口通信程序全程图文解说

    (说明:我们的编程环境是windows xp下,在Qt Creator中进行,假设在Linux下或直接用源代码编写,程序稍有不同,请自己修改.) 在Qt中并没有特定的串口控制类,如今大部分人使用的是第 ...

  6. 转:Qt编写串口通信程序全程图文讲解

    转载:http://blog.csdn.net/yafeilinux/article/details/4717706  作者:yafeilinux (说明:我们的编程环境是windows xp下,在Q ...

  7. Qt简单项目--加法计算器(详细代码注释)

    Qt的简单案例--加法计算器(详细代码注释) 一.项目结构 二.项目代码 widget.h #ifndef WIDGET_H #define WIDGET_H //预编译指令, 为了避免头文件被重复包 ...

  8. Qt编写串口通信程序全程图文讲解 .

    在Qt中并没有特定的串口控制类,现在大部分人使用的是第三方写的qextserialport类,我们这里也是使用的该类.我们可以去 http://sourceforge.net/projects/qex ...

  9. 【转】Qt编写串口通信程序全程图文讲解

    本文章原创于www.yafeilinux.com 转载请注明出处. (说明:我们的编程环境是windows xp下,在Qt Creator中进行,如果在Linux下或直接用源码编写,程序稍有不同,请自 ...

随机推荐

  1. js 进阶 10 js选择器大全

    js 进阶 10 js选择器大全 一.总结 一句话总结:和css选择器很像 二.JQuery选择器 原生javaScript中,只能使用getELementById().getElementByNam ...

  2. 理解Erlang/OTP - Application

    http://www.cnblogs.com/me-sa/archive/2011/12/27/erlang0025.html 1>application:start(log4erl). 我们就 ...

  3. NSUserDefaults:通常用来保存一些小巧的数据,如用户的用户名密码,或者是用户的使用习惯,如是否自动打开背景音乐等。

    1,NSUserDefaults通常用来保存一些小巧的数据,如用户的用户名密码,或者是用户的使用习惯,如是否自动打开背景音乐等. 2,使用它的原因就是:代码简短,使用方便 3,使用方法如下: -(vo ...

  4. HDU 1502 - dp + 压位

    传送门 题目大意: 3*n的字符串,A.B.C分别有n个,w(X)代表X字母出现的次数,要求该字符串的所有前缀中w(A) >= w(B) >= w(C),问合法方案数有多少. 题目分析: ...

  5. Visual Studio for Mac

    Visual Studio for Mac 初体验   你喜爱的 IDE,现在可用于 Mac 来自:https://www.visualstudio.com/zh-hans/vs/visual-stu ...

  6. Method for training dynamic random access memory (DRAM) controller timing delays

    Timing delays in a double data rate (DDR) dynamic random access memory (DRAM) controller (114, 116) ...

  7. 用Ruby实现的论坛灌水工具:CC98 Post Machine

    介绍 ZJU 的校网论坛 CC98 比较活跃.论坛只对校内网开放,而且账号跟学生绑定,每个学生注册的账号数量有限.『十大』是 CC98 的经典页面:基于关注的人数(回帖的用户数而不是回帖的数量)用算法 ...

  8. 链接hdf5库出现错误的解决办法

    作者:朱金灿 来源:http://blog.csdn.net/clever101 在链接hdf5库出现一些链接错误: error LNK2001: 无法解析的外部符号 _H5T_NATIVE_DOUB ...

  9. MongoDB 可视化管理工具

    MongoDB 可视化管理工具 (2011年10月-至今)   正文 该项目从2011年10月开始开发,知道现在已经有整整5年了.MongoDB也从一开始的大红大紫到现在趋于平淡.MongoCola这 ...

  10. 机器学习: TensorFlow with MLP 笑脸识别

    Tensor Flow 是一个采用数据流图(data flow graphs),用于数值计算的开源软件库.节点(Nodes)在图中表示数学操作,图中的线(edges)则表示在节点间相互联系的多维数据数 ...