【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- ...
随机推荐
- sublime text package control 被墙的解决办法
似乎没有办法 只能碰运气, 时好时坏. 或者手动安装 趁着好的时候, 下载离线包 https://packagecontrol.io/Package%20Control.sublime-package ...
- Android自定义View实战(SlideTab-可滑动的选择器)
转载请标明出处: http://blog.csdn.net/xmxkf/article/details/52178553 本文出自:[openXu的博客] 目录: 初步分析重写onDraw绘制 重写o ...
- 不规则递归转换为while,留底
我发现当参数并不太多时,从性能的角度来看,没必要用一个class来保存参数(虽然看起来更加生动形象),直接用最简单的元组就可以了. from hanoi import * # example tree ...
- Linux 高性能服务器编程——TCP协议详解
问题聚焦: 本节从如下四个方面讨论TCP协议: TCP头部信息:指定通信的源端端口号.目的端端口号.管理TCP连接,控制两个方向的数据流 TCP状态转移过程:TCP连接的任意一 ...
- RxJava(八)concat符操作处理多数据源
欢迎转载,转载请标明出处: http://blog.csdn.net/johnny901114/article/details/51568562 本文出自:[余志强的博客] 一.concat操作符概述 ...
- JDBC的java驱动安装
首先登陆mysql.com官方网站,download-->选中下面的community–>mysql connentor-->然后选中下面与平台无关的zip包,一般是第二个,完成下载 ...
- PullToRefreshScrollView 嵌套RecyclerView实现特卖列表倒计时抢购
不久之前,我们谈到了通过Handler与timer及TimerTask结合实现倒计时抢购列表,那个是PullToRefreshListView实现的,今天要讲的是PullToRefreshScroll ...
- Linux系统编程----孤儿进程
什么是孤儿进程? 孤儿进程, 指在父进程退出后,而子进程还在运行,这个子进程就成了孤儿进程,这时由init进程(pid=1)接管 来看看例子: #include <stdio.h> #i ...
- Servlet处理流程分析-Servlet学习之旅(二)
tomcat的处理处理客户端流程分析 tomcat即是servlet容器也具有web服务器的功能,即也具有html页面的功能. 1.首先客户端会将html请求发给tomcat内置的web服务器 2.w ...
- SSH深度历险(六) 深入浅出----- Spring事务配置的五种方式
这对时间在学习SSH中Spring架构,Spring的事务配置做了详细总结,在此之间对Spring的事务配置只是停留在听说的阶段,总结一下,整体把控,通过这次的学习发觉Spring的事务配置只要把思路 ...