QT--电子时钟
QT--电子时钟
简介:
使用了绘图事件、定时事件,有两个窗口,一个窗口用于设置时间(主窗口),一个是时钟窗口
1.主窗口
menu.h文件:
#ifndef MENU_H
#define MENU_H #include <QWidget>
#include <QPushButton>
#include <QLineEdit> class menu : public QWidget
{
Q_OBJECT
public:
explicit menu(QWidget *parent = nullptr); public:
QPushButton *bt1; //显示时钟
QPushButton *bt2; //设置时间
QLineEdit *ls; //输入秒
QLineEdit *lm; //输入分
QLineEdit *lh; //输入时 signals:
void display(); //显示信号
void setTime(int h,int m,int s); //设置时间信号 public:
void send_s();
void send_t(); public slots:
}; #endif // MENU_H
menu.cpp文件:
#include "menu.h"
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QLabel> menu::menu(QWidget *parent) : QWidget(parent)
{
resize(,); QHBoxLayout *hb = new QHBoxLayout();
QVBoxLayout *vb = new QVBoxLayout(); QLabel *l1 = new QLabel(":");
QLabel *l2 = new QLabel(":"); bt1 = new QPushButton("显示时钟");
bt2 = new QPushButton("设置时间");
ls = new QLineEdit("");
lm = new QLineEdit("");
lh = new QLineEdit(""); hb->addWidget(lh);
hb->addWidget(l1);
hb->addWidget(lm);
hb->addWidget(l2);
hb->addWidget(ls); hb->addWidget(bt2); vb->addLayout(hb);
vb->addWidget(bt1); this->setLayout(vb); connect(bt1,&QPushButton::released,this,&menu::send_s); //显示时钟
connect(bt2,&QPushButton::released,this,&menu::send_t); //设置时间 } void menu::send_t() //设置
{
int s = ls->text().toInt();
int m = lm->text().toInt();
int h = * lh->text().toInt(); emit setTime(h,m,s);
}
void menu::send_s() //显示
{
emit display();
}
2.时钟窗口
widget.h文件:
#ifndef WIDGET_H
#define WIDGET_H #include "menu.h"
#include <QWidget>
#include <QPaintEvent> //绘图事件
#include <QTimerEvent> namespace Ui {
class Widget;
} class Widget : public QWidget
{
Q_OBJECT public:
int s = ; //秒
int m = ; //分
int h = ; //时
QString T; //总时间 QPainter *painter; menu w1; public:
void send_s(); //显示钟表
void get_t(int h1,int m1,int s1); //设置时间
void timerEvent(QTimerEvent *adf); //定时
void paintEvent(QPaintEvent *event); //绘图
public:
explicit Widget(QWidget *parent = nullptr);
~Widget(); private:
Ui::Widget *ui;
}; #endif // WIDGET_H
widget.cpp文件:
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
#include <QPainter> Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this); w1.show();
startTimer(); //定时1秒 resize(,);
this->setMaximumSize(,); //设置窗口大小 connect(&w1,&menu::display,this,&Widget::send_s); //显示钟表
connect(&w1,&menu::setTime,this,&Widget::get_t);
} void Widget::send_s() //显示钟表
{
this->show();
} void Widget::get_t(int h1,int m1,int s1)
{
s = s1;
m = m1;
h = h1;
} void Widget::timerEvent(QTimerEvent *event)
{
qDebug() <<"定时" ;
s ++;
if(s == ) //180+360=540
{
m++;
s = ;
} if(m == )
{
h ++;
}
if(m == )
{
m = ;
}
if(h == )
{
h = ;
}
QString Ss = QString::number(s);
QString Sm = QString::number(m);
int H = h / ;
QString Sh = QString::number(H);
T = Sh + ":" + Sm + ":" +Ss;
qDebug() <<T; } void Widget::paintEvent(QPaintEvent *event)
{
painter = new QPainter(this); //画家 /* 画笔 */
QPen pen(Qt::red,);
painter->setPen(pen); /* 移动画家 */
painter->translate(this->width()/,this->height()/); /* 画钟 */
QRectF target(-(this->width()/),-(this->height()/), this->width(), this->width());
QRectF source(,, this->width(), this->height());
QPixmap pixmap(":/new/prefix1/time1.png");
painter->drawPixmap(target, pixmap, source); /* 画秒针 */
QRectF target_s(,,, );
QRectF source_s(,, this->width(),this->height());
QPixmap pixmap_s(":/new/prefix1/time_s.png"); painter->rotate(s*+); //定时旋转秒针
painter->drawPixmap(target_s, pixmap_s, source_s); /* 画分针 */
QRectF target_m(-,-,, );
QRectF source_m(,, this->width(), this->height());
QPixmap pixmap_m(":/new/prefix1/time_m.png"); painter->rotate(-(s*+)); //移动回原位
painter->rotate(m*+); //旋转分针
painter->drawPixmap(target_m, pixmap_m, source_m); /* 画时针 */
QRectF target_h(-,-,, );
QRectF source_h(,, this->width(), this->width());
QPixmap pixmap_h(":/new/prefix1/time_h.png"); painter->rotate(-(m*+)); //移动回原位
painter->rotate((h*)+); //旋转分针
painter->drawPixmap(target_h, pixmap_h, source_h); painter->rotate(-(h*+));
painter->drawText(-,,,,Qt::AlignCenter, T); //数字时钟
painter->rotate(h*+); update(); } Widget::~Widget()
{
delete ui;
}
3.运行效果图
QT--电子时钟的更多相关文章
- Qt - 与众不同的电子时钟
Qt的电子时钟是个老掉牙的demo了,但是利用lcdNumber显示的样子非常老土(下图第一个显示效果),一看就知道是从qt帮助文档里摘出来的example,毫无新意. 美化一下系统时钟,抛开固有控 ...
- 公开课 之 tony 电子时钟 (课堂笔记)
# tony 之电子时钟from PyQt5.QtWidgets import QApplication, QWidget, QLCDNumber, QDesktopWidget, QVBoxLayo ...
- JavaScript电子时钟+倒计时
JavaScript时间类 获取时分秒: getHours() getMinutes(); getSeconds(); 获取 ...
- JS实现电子时钟
目前有个小项目,在首页头部导航栏里需要一个电子时钟的效果,于是我就采用如下代码实现了一个电子时钟的效果.不过不完美,第一种方式容易导致网页莫名其妙的异常,后来觉得可能是做的操作太多了,然后 ...
- 桌面小部件----LED电子时钟实现
桌面控件是通过 Broadcast 的形式来进行控制的,因此每个桌面控件都对应于一个BroadcastReceiver.为了简化桌面控件的开发,Android 系统提供了一个 AppWidgetPro ...
- [TPYBoard-Micropython之会python就能做硬件 3] 制作电子时钟
转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi 欢迎加入讨论群 64770604 一.本次实验所需器材 1.TPYboard V102板 一块 2.DS3231 ...
- 3分钟利用TurnipBit制作电子时钟
转载请注明:@小五义 http://www.cnblogs.com/xiaowuyi 欢迎加入讨论群 64770604 TurnipBit(www.turnipbit.com)是一个面向青少年的开发板 ...
- Micropython TurnipBit 电子时钟 青少年编程入门
电子时钟是一个很常用但是制作非常简单的小玩具了,对于Micropython初学者来说,制作一个电子时钟是非常简单又容易检验自己学习成果的实验了.TurnipBit相比于其他开发板,制作电子时钟就更加简 ...
- MFC桌面电子时钟的设计与实现
目录 核心技术 需求分析 程序设计 程序展示 (一)核心技术 MFC(Micosoft Foundation Class Libay,微基础类库)是微基于Windows平台下的C++类库集合,MFC包 ...
- 使用CSS3生成的电子时钟特效
在线演示 本地下载 突然觉得自己对带工作的态度亟需改正,虽然不喜欢现在的加班生活,但是自己要去接受自己不喜欢的,才能获得自己喜欢的. 这是自己好久之前丛过的一个时钟,网上应该有这个的教程,虽然实现的效 ...
随机推荐
- luogu P5514 [MtOI2019]永夜的报应
题目背景 在这世上有一乡一林一竹亭,也有一主一仆一仇敌. 有人曾经想拍下他们的身影,却被可爱的兔子迷惑了心神. 那些迷途中的人啊,终究会消失在不灭的永夜中-- 题目描述 蓬莱山 辉夜(Kaguya)手 ...
- 压缩感知重构算法之CoSaMP算法python实现
压缩感知重构算法之OMP算法python实现 压缩感知重构算法之CoSaMP算法python实现 压缩感知重构算法之SP算法python实现 压缩感知重构算法之IHT算法python实现 压缩感知重构 ...
- [TimLinux] JavaScript querySelectorAll返回对象无法使用indexOf问题
1. querySelectorAll 该函数返回的对象类型为NodeList,这个类型并没有indexOf方法,如果需要使用indexOf方法,需要先将该对象每一项转存入Array对象中,然后就可以 ...
- 最全的防火墙(firewalld)
第1章 防火墙的介绍 1.1 防火墙的介绍 1.1.1 概念 动态管理防火墙服务(图形界面和linux界面都可以实现) 支持不同防火墙的区域信息 属于传输层次的防火墙 1.1.2 防火墙的默认规则 ...
- WOE(证据权重)为何这样计算?
更多大数据分析.建模等内容请关注公众号<bigdatamodeling> 先简单回顾一下WOE的含义.假设x是类别变量或分箱处理过的连续变量,含R个类别或分段,取值为{C1, ..., C ...
- python读取,显示,保存mnist图片
python处理二进制 python的struct模块可以将整型(或者其它类型)转化为byte数组.看下面的代码. # coding: utf-8 from struct import * # 包装成 ...
- CSS动态表达式
样式:style:expression(脚本) 如: 1 _top: expression(this.offsetHeight); _top: expression(eval(document.doc ...
- sendRedirect()和forward()方法有什么区别?
forward是服务器内部的跳转,浏览器的地址栏不会发生变化,同时可以把request和response传递给后一个请求.sendRedirect()是浏览器方面的跳转,要发送两次请求,地址栏也会发生 ...
- 【ES6】数值的扩展
1.Number.isFinite()和Number.isNaN()[只对数值有效] (1)Number.isFinite()用来检查一个数值是否为有限的(finite),即不是Infinity. [ ...
- C# WPF实用的注册窗体
时间如流水,只能流去不流回! 点赞再看,养成习惯,这是您给我创作的动力! 本文 Dotnet9 https://dotnet9.com 已收录,站长乐于分享dotnet相关技术,比如Winform.W ...