当前位置: 首页 > 编程笔记 >

Qt编程实现小时钟

阴靖
2023-03-14
本文向大家介绍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();
 
 
}

运行结果如下图:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。

 类似资料:
  • 本文向大家介绍Qt实现简易时钟,包括了Qt实现简易时钟的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Qt实现简易时钟展示的具体代码,供大家参考,具体内容如下 一、效果展示 简单实现时钟(圆盘+QLCDNumber),大小刻度,数字等。 二、实现 .pro .h .cpp 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 交叉编译到Raspberry Pi的方法多种多样,也有交叉编译Qt或OpenCV的解决方案。 然而,我找不到任何解决方案来交叉编译一个与Qt也使用OpenCV的程序。 我指定了以前用于编译Qt的作为编译器: 我创建了目录,并在其中尝试: (下载的opencv源代码位于中,我最近使用Qt安装附带的G++编译器成功地为x64平台编译了opencv。)注意,是当前会话的用户名,以防其他初学者将来尝试这些

  • 本章重点 掌握标准 C++的基础知识和技能 掌握不同平台上的基本编程机制和原理 掌握 Vi 的使用 掌握 GCC 和 GDB 的使用 本章主要讲述与 Qt 编程相关的一些基础知识和技能,内容涵盖了 Windows、Linux 和 Mac OS X 这三大主流平台,由于篇幅关系,有些内容无法详细展开,希望读者朋友能够查 阅相关的书籍和资料辅助学习。 对于本章内容的学习,笔者建议开始时可采用 “粗读”

  • 本文向大家介绍Qt实现转动轮播图,包括了Qt实现转动轮播图的使用技巧和注意事项,需要的朋友参考一下 Qt轮播图的实现代码,供大家参考,具体内容如下 qt轮播图简单的实现,功能会在后面完善 效果图: 这里我是用了QGraphicsScene+QGraphicsView+QGraphicsObject,其中对QGraphicsView和QGraphicsObject进行继承派生类功能进行了添加。时间有

  • 导语 前面已经在主窗口中添加了菜单和工具栏,这一篇中我们将实现基本的文本编辑功能。在开始正式写程序之前,我们先要考虑一下整个流程。因为这里要写一个记事本一样的程序,所以最好先打开Windows中的记事本,进行一些简单的操作,然后考虑怎样去实现这些功能。再者,再强大的软件,它的功能也是一个一个加上去的,不要设想一下子写出所有的功能。我们这里先实现新建文件,保存文件,和文件另存为三个功能,是因为它们联

  • 本文向大家介绍小程序实现列表倒计时功能,包括了小程序实现列表倒计时功能的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了小程序实现列表倒计时的具体代码,供大家参考,具体内容如下 效果 HTML代码 CSS代码 JS代码(得到后台数据查询用FIND方法插入字段,直接遍历会有问题) 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 本文向大家介绍PHP实现小偷程序实例,包括了PHP实现小偷程序实例的使用技巧和注意事项,需要的朋友参考一下 为什么使用“小偷程序”? 远程抓取文章资讯或商品信息是很多企业要求程序员实现的功能,也就是俗说的小偷程序。其最主要的优点是:解决了公司网编繁重的工作,大大提高了效率。只需要一运行就能快速的抓取别人网站的信息。 “小偷程序”在哪里运行? “小偷程序” 应该在 Windows 下的 DOS或 L

  • 本文向大家介绍Linux编程之PING实现,包括了Linux编程之PING实现的使用技巧和注意事项,需要的朋友参考一下 PING(Packet InterNet Groper)中文名为因特网包探索器,是用来查看网络上另一个主机系统的网络连接是否正常的一个工具。ping命令的工作原理是:向网络上的另一个主机系统发送ICMP报文,如果指定系统得到了报文,它将把回复报文传回给发送者,这有点象潜水艇声纳系