【Qt编程】Qt 小时钟
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 小时钟的更多相关文章
- 【python】实现一个python编程的小时钟!
[本实验内容] 1.GUI.PyQT5介绍2.实现此次实验效果 [一 GUI.PyQt5介绍] 1.Python简介 2.GUI介绍 几个常用的Python GUI库: (1)wxPython (2) ...
- Qt编程学习网站
http://blog.csdn.net/k122769836/article/details/8637677 QT - little_su - 博客频道 - CSDN.NET Qt - 1+1=2 ...
- 【Qt编程】基于Qt的词典开发系列--后序
从去年八月份到现在,总算完成了词典的编写以及相关技术文档的编辑工作.从整个过程来说,文档的编写比程序的实现耗费的时间更多.基于Qt的词典开发系列文章,大致包含了在编写词典软件过程中遇到的技术重点与难点 ...
- 零基础学QT编程
吴迪.2010.1 北京航空航天大学出版社 Qt资源 CSDN QT http://bbs.csdn.net/forums/Qt/ QT编程网 http://www.qtbcw.com/ 编程论坛 ...
- Qt编程—去掉标题栏和设置窗口透明用法
学习Qt编程,有时候我们很想做出好看又比较炫的画面,这时就常用到qt上的一些技巧. 这里我以一个小例子来展示qt的这些技巧,此qt编程写的,如图:(去掉标题栏和设置窗口透明后) 代码实现部分: .h文 ...
- qt编程入门
面对qt编程,必须先知道qt中常用的类: QPushButton按钮类.QLabel标签类.QMessageBox对话框类.QCheckBox.QAction.QMenu.QStatusBar.QTo ...
- Visual Studio下Qt编程中对中文的处理
Visual Studio下Qt编程中对中文的处理 本文为原创文章,原文地址http://www.cnblogs.com/c4isr/p/qt_develop_in_vs.html Visual St ...
- QT笔记(1)--QT编程环境搭建
一.QT简介 Qt 是一个1991年由奇趣科技开发的跨平台C++图形用户界面应用程序开发框架.它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器.Qt是面向对象的框架,使用特殊 ...
- 在windows下的QT编程中的_TCHAR与QString之间的转换
由于在windows下的QT编程中,如果涉及到使用微软的API,那么不可避免使用_TCHAR这些类型,因此在网上查了一下,其中一个老外的论坛有人给出了这个转换,因此在这里做一下笔记 : )#ifdef ...
- QT编程环境搭建
使用QT需要QT的库以及QT creator,在QT5以后的版本中,两者已经集成,不需要单独下载了,只需要下载一个文件即可.配置步骤如下: 1.下载qt-opensource-windows-x86- ...
随机推荐
- Mybatis源码分析--关联表查询及延迟加载原理(二)
在上一篇博客Mybatis源码分析--关联表查询及延迟加载(一)中我们简单介绍了Mybatis的延迟加载的编程,接下来我们通过分析源码来分析一下Mybatis延迟加载的实现原理. 其实简单来说Myba ...
- TCP发送源码学习(1)--tcp_sendmsg
一.tcp_sendmsg()函数分析: int tcp_sendmsg(struct kiocb *iocb, struct sock *sk, struct msghdr *msg, size_t ...
- 用Python最原始的函数模拟eval函数的浮点数运算功能
前几天看一个网友提问,如何计算'1+1'这种字符串的值,不能用eval函数. 我仿佛记得以前新手时,对这个问题完全不知道如何下手. 我觉得处理括号实在是太复杂了,多层嵌套括号怎么解析呢?一些多余的括号 ...
- JAVA面向对象-----super关键字
JAVA面向对象-–super关键字 1:定义Father(父类)类 1:成员变量int x=1; 2:构造方法无参的和有参的,有输出语句 2:定义Son类extends Father类 1:成员变量 ...
- windows平台下 c/c++进行http通信的教训
由于需要使用c++开发一个桌面应用软件,需要用到http请求进行通讯,也是本人第一次进行网络相关的开发工作,遇到了不少坑. 由于是在windows下开发和使用的应用软件,自然而然想到了调用Window ...
- 一个都不能少: DevOps的3大核心基础架构
DevOps的涵盖面非常广,因为这个概念的火热,又有很多文章和技术都在把DevOps的帽子扣在自己头上,让很多人迷惑不解.其实,DevOps的知识体系如果从顶层上来分解,只有2块:方法论和工具链.方法 ...
- Springmvc注解注入的简单demo
今天看了注解注入觉得确实简化了xml配置,一般情况下Spring容器要成功启动的三大要件分别是:Bean定义信息,Bean实现类,以及spring本身.如果采取基于XML的配置,Bean信息和Bean ...
- hbase操作(shell 命令,如建表,清空表,增删改查)以及 hbase表存储结构和原理
两篇讲的不错文章 http://www.cnblogs.com/nexiyi/p/hbase_shell.html http://blog.csdn.net/u010967382/article/de ...
- 发现----Android Demo
时间悄悄的走,转眼来实习已经三个月了,三个月的时间,小编慢慢的成长着,从刚开始的电商项目到现在的车段子项目,小编在走过一个又一个项目的同时,走过了一个又一个战胜自己的奇迹,每次遇到一个新的技术点,小编 ...
- hashmap 循环取出所有值 取出特定的值 两种方法
//第一种 Iterator menus = menu.iterator(); while(menus.hasNext()) { Map userMap = (Map) menus.next(); S ...