Qt的时钟Example
来源:互联网 发布:微信支付java案例demo 编辑:程序博客网 时间:2024/06/09 15:43
最近,小朋友开始学习认识时钟,看看Qt下刚好有个时钟的例子,翻出来温故而知新。
浏览了传统时钟和数字时钟的代码,都是很清晰、易懂。
我把两个例子程序整合在一起,在给传统时钟加上数字,方便小朋友认识时钟。
运行截图:
MyClock.pro文件:
HEADERS = analogclock.h \ digitalclock.hSOURCES = analogclock.cpp \ digitalclock.cpp main.cpp
digitalclock.h文件:
#ifndef DIGITALCLOCK_H#define DIGITALCLOCK_H#include <QLCDNumber>class DigitalClock : public QLCDNumber{ //对于具有signal,slot机制的类需要声明 Q_OBJECTpublic: DigitalClock(QWidget *parent = 0);private slots: void showTime();};#endif
digitalclock.cpp文件:
#include <QtGui>#include "digitalclock.h"DigitalClock::DigitalClock(QWidget *parent) : QLCDNumber(parent){ setSegmentStyle(Filled); QTimer *timer = new QTimer(this); connect(timer, SIGNAL(timeout()), this, SLOT(showTime())); timer->start(1000); showTime(); //setWindowTitle(tr("Digital Clock")); resize(150, 60);}void DigitalClock::showTime(){ QTime time = QTime::currentTime(); QString text = time.toString("hh:mm"); if ((time.second() % 2) == 0) text[2] = ' '; display(text);}
analogclock.h文件:
#ifndef ANALOGCLOCK_H#define ANALOGCLOCK_H#include <QWidget>class AnalogClock : public QWidget{ //对于具有signal,slot机制的类需要声明 Q_OBJECTpublic: AnalogClock(QWidget *parent = 0);protected: //重绘用的事件处理函式 void paintEvent(QPaintEvent *event);};#endif
analogclock.cpp文件:
#include <QtGui>#include "analogclock.h"AnalogClock::AnalogClock(QWidget *parent) : QWidget(parent){ //声明一个定时器 QTimer *timer = new QTimer(this); //连接信号与槽 connect(timer, SIGNAL(timeout()), this, SLOT(update())); timer->start(1000); // ... QFont font; font.setPointSize(10);//字体大小设置为10 setFont(font); //设置窗体名称与大小 setWindowTitle(tr("时钟")); resize(600, 500);}void AnalogClock::paintEvent(QPaintEvent *){ //下面三个数组用来定义表针的三个顶点,以便后面的填充 static const QPoint hourHand[4] = { QPoint(6, 8), QPoint(0, 16), QPoint(-6, 8), QPoint(0, -40) }; static const QPoint minuteHand[4] = { QPoint(5, 8), QPoint(0, 16), QPoint(-5, 8), QPoint(0, -65) }; static const QPoint secondHand[4] = { QPoint(2, 8), QPoint(0, 16), QPoint(-2, 8), QPoint(0, -80) }; //填充表针的颜色 QColor hourColor(127, 0, 127); QColor minuteColor(0, 127, 127, 191); QColor secondColor(127, 127, 0, 120); //绘制的范围 int side = qMin(width(), height()); //获取当前的时间 QTime time = QTime::currentTime(); //声明用来绘图用的“画家” QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); //重新定位坐标起始点点 painter.translate(width() / 2, height() / 2); //设定花布的边界 painter.scale(side / 200.0, side / 200.0); //填充时针,不需要边线所以NoPen painter.setPen(Qt::NoPen); //画刷颜色设定 painter.setBrush(hourColor); //保存“画家”的状态 painter.save(); //将“画家”(的”视角“)根据时间参数转移 painter.rotate(30.0 * ((time.hour() + time.minute() / 60.0))); //填充时针的区域 painter.drawConvexPolygon(hourHand, 4); //恢复填充前“画家”的状态 painter.restore(); //下面画表示小时的刻度,此时要用到画笔(因为要划线) painter.setPen(hourColor); //十二个刻度,循环下就好了 for (int i = 0; i < 12; ++i) { //没次都是这样,先画跳线,再转个角 painter.drawLine(88, 0, 96, 0); painter.rotate(30.0); painter.drawText(-20, -82, 40, 40, Qt::AlignHCenter | Qt::AlignTop, QString::number(i+1)); } //后面的跟前面的类似,分别绘制了分针和秒针,及相应的刻度,我就不废话了 painter.setPen(Qt::NoPen); painter.setBrush(minuteColor); painter.save(); painter.rotate(6.0 * (time.minute() + time.second() / 60.0)); painter.drawConvexPolygon(minuteHand, 4); painter.restore(); painter.setPen(minuteColor); for (int j = 0; j < 60; ++j) { if ((j % 5) != 0) painter.drawLine(92, 0, 96, 0); painter.rotate(6.0); } painter.setPen(Qt::NoPen); painter.setBrush(secondColor); painter.save(); painter.rotate(6.0 * time.second()); painter.drawConvexPolygon(secondHand, 4); painter.restore();}
main.cpp文件:
#include <QApplication>#include <qtextcodec.h>#include "analogclock.h"#include "digitalclock.h"int main(int argc, char *argv[]){ QApplication app(argc, argv); QTextCodec *codec = QTextCodec::codecForName("utf8"); QTextCodec::setCodecForTr(codec); QTextCodec::setCodecForLocale(codec); QTextCodec::setCodecForCStrings(codec); AnalogClock aclock; DigitalClock dclock(&aclock);#if defined(Q_OS_SYMBIAN) aclock.showMaximized();#else aclock.show();#endif return app.exec();}
编译运行,如题头的运行效果。
0 0
- Qt的时钟Example
- Qt qwt的example
- QT时钟的创建
- Qt - 与众不同的电子时钟
- qt-example之animated picture的学习
- QT时钟
- Qt -- 时钟
- 基于QT的时钟模拟程序
- 一个最简单的QT数字时钟
- Qt--时钟插件的创建与使用
- NOKIA QT EXAMPLE
- QT (Application Example)
- Qt示例[Mandelbrot Example]
- Qt-Image Viewer Example
- 什么是Qt的代理QItemDelegate_Spin Box Delegate Example例子分析
- 【Qt编程】Qt 小时钟
- QT GUI 简易时钟
- qt 修改系统时钟
- UESTC 1013 我的魔法栈 贪心法
- c++ template 的traits技术
- linux之cut用法
- 算法马拉松8(差和问题)
- java消息机制
- Qt的时钟Example
- Win7下安装OK6410的USB驱动以及Linux下源码安装dnw
- sublist分组list模拟代码
- TECHNIQUES(技术)
- Educational Codeforces Round 2_B. Queries about less or equal elements
- 适配器模式
- HDU 2955 Robberies
- UESTC 1033 Marineking wilyin
- 10007---注入属性值细节