当前位置: 首页 > news >正文

QT设计一个小闹钟

        设置一个闹钟,左侧窗口显示当前时间,右侧设置时间,以及控制闹钟的开关,下方显示闹钟响时的提示语。当按启动按钮时,设置时间与闹钟提示语均不可再改变。当点击停止时,关闭闹钟并重新启用设置时间与闹钟提示语。

闹钟窗口展示:

工程管理文件:

QT       += core gui texttospeechgreaterThan(QT_MAJOR_VERSION, 4): QT += widgetsCONFIG += c++11# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0SOURCES += \main.cpp \widget.cppHEADERS += \widget.hFORMS += \widget.ui# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += targetRESOURCES += \picture.qrc

头文件:

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QDebug>
#include <QLabel>   //标签
#include <QTextEdit>    //文本编辑器
#include <QLineEdit>    //行编辑器
#include <QPushButton>  //按钮#include <QTimerEvent>  //事件处理函数
#include <QDateTime>
#include <QtTextToSpeech>    //播报员
#include <QPaintEvent>
#include <QPainter>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic slots://定义启动按钮的槽函数void on_btnStart_clicked();//定义停止按钮的槽函数void on_btnStop_clicked();public:Widget(QWidget *parent = nullptr);~Widget();//重写定时器事件处理函数void timerEvent(QTimerEvent *event) override;void paintEvent(QPaintEvent *event) override;void mouseMoveEvent(QMouseEvent *event) override;void mousePressEvent(QMouseEvent *event) override;private:Ui::Widget *ui;QLabel *lab_time;QPushButton *btn_start;QPushButton *btn_stop;QLineEdit *line_setTime;QTextEdit *text_show;int time_id;    //基于事件处理函数QString oclock;   //设置闹钟QTextToSpeech *speak;   //设置播报员QPoint drap;
};
#endif // WIDGET_H

主函数:

#include "widget.h"#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w; w.show();return a.exec();
}

主要功能函数:

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//实例化一个播报员speak = new QTextToSpeech(this);time_id = this->startTimer(1000);//纯净窗口this->setWindowFlag(Qt::FramelessWindowHint);//固定窗口尺寸this->setFixedSize(540,410);//显示当前时间lab_time = new QLabel(this);lab_time->setAlignment(Qt::AlignCenter);lab_time->setStyleSheet("border:2px solid rgb(0, 170, 255);font:16pt;border-radius:10px;color:white");lab_time->setGeometry(20,20,300,120);//设置text窗口text_show = new QTextEdit(this);text_show->setPlaceholderText("请输入闹钟提示语");text_show->setAlignment(Qt::AlignCenter);text_show->setStyleSheet("border:2px solid rgb(0, 170, 255);border-radius:5px;font:20pt;background-color:transparent;color:white");text_show->setGeometry(20,150,500,250);//显示设置的时间line_setTime = new QLineEdit(this);line_setTime->setPlaceholderText("请设置时间");line_setTime->setAlignment(Qt::AlignCenter);line_setTime->setStyleSheet("border:2px solid rgb(0, 170, 255);font:16pt;border-radius:10px;background-color:transparent;color:white");line_setTime->setGeometry(350,20,170,60);//启动按钮btn_start = new QPushButton(this);btn_start->setText("启动");btn_start->setStyleSheet("border:2px solid rgb(0, 170, 255);border-radius:10px;font:14pt;color:white");btn_start->setGeometry(350,90,80,50);//停止按钮btn_stop = new QPushButton(this);btn_stop->setText("停止");btn_stop->setStyleSheet("border:2px solid rgb(0, 170, 255);border-radius:10px;font:14pt;color:white");btn_stop->setGeometry(440,90,80,50);//启动按钮connect(btn_start, &QPushButton::clicked, this, &Widget::on_btnStart_clicked);connect(btn_stop, &QPushButton::clicked, this, &Widget::on_btnStop_clicked);}Widget::~Widget()
{delete ui;
}void Widget::on_btnStart_clicked()
{oclock = line_setTime->text();line_setTime->setEnabled(false);text_show->setEnabled(false);btn_start->setText("已启动");
}void Widget::on_btnStop_clicked()
{line_setTime->setEnabled(true);text_show->setEnabled(true);speak->stop();btn_start->setText("启动");
}
void Widget::timerEvent(QTimerEvent *event)
{if(event->timerId() == time_id){QDateTime time = QDateTime::currentDateTime();lab_time->setText(time.toString("yyyy-MM-dd hh:mm:ss"));if(oclock == time.toString("hh:mm:ss")){speak->say(text_show->toPlainText());}}
}void Widget::paintEvent(QPaintEvent * event)
{QPainter painter(this);painter.drawPixmap(rect(),QPixmap(":/picture/back.jpg"),QRect());
}void Widget::mousePressEvent(QMouseEvent *event)
{drap = event->globalPos() - this->pos();//右键关闭窗口if(event->button() == Qt::RightButton){this->close();}
}void Widget::mouseMoveEvent(QMouseEvent *event)
{this->move(event->globalPos() - drap);
}

相关文章:

QT设计一个小闹钟

设置一个闹钟&#xff0c;左侧窗口显示当前时间&#xff0c;右侧设置时间&#xff0c;以及控制闹钟的开关&#xff0c;下方显示闹钟响时的提示语。当按启动按钮时&#xff0c;设置时间与闹钟提示语均不可再改变。当点击停止时&#xff0c;关闭闹钟并重新启用设置时间与闹钟提示…...

MybatisPlus(3)

前言&#x1f36d; ❤️❤️❤️SSM专栏更新中&#xff0c;各位大佬觉得写得不错&#xff0c;支持一下&#xff0c;感谢了&#xff01;❤️❤️❤️ Spring Spring MVC MyBatis_冷兮雪的博客-CSDN博客 一、查询投影&#x1f36d; 查询投影是指在查询操作中&#xff0c;只选择…...

安全计算环境技术测评要求项

1.身份鉴别-在应用系统及各类型设备中确认操作者身份的过程&#xff08;身份鉴别和数据保密&#xff09; 1-2/2-3/3-4/4-4 a&#xff09;应对登录的用户进行身份标识和鉴别&#xff0c;身份标识具有唯一性&#xff0c;身份鉴别信息具有复杂度要求并定期更换 b&#xff09;应具有…...

Excel快捷键表

工作表插入新工作表ShiftF11或AltShiftF1移动到工作簿中的下一张工作表CtrlPageDown移动到工作簿中的上一张工作表CtrlPageUp选定当前工作表和下一张工作表ShiftCtrlPageDown取消选定多张工作表Ctrl PageDown选定其他的工作表CtrlPageUp选定当前工作表和上一张工作表ShiftCtrlP…...

Windows Server 系统各版本及授权说明(附下载地址

本文为Windows Server系统各版本差异对比及授权说明。 会对相关目前仍主流使用的相关Windows Server系统版本和相关授权进行对比和功能说明。 WindowsServer2012 R2 Windows Server 2012 R2授权方式是按照物理CPU数量进行授权&#xff0c;比如物理服务器CPU插槽数量2&#xff…...

【智慧工地源码】物联网和传感器技术在智慧工地的应用

物联网&#xff08;IoT&#xff09;和传感器技术在智慧工地中扮演着至关重要的角色。这些技术的应用&#xff0c;使得智慧工地能够实现对施工过程的精确监控、数据收集和分析&#xff0c;以及设备互联&#xff0c;从而提高工程效率、减少成本并改善工人的工作环境。 一、物联网…...

计算机安全学习笔记(IV):基于角色的访问控制 - RBAC

RBAC(Role-Based Access Control)基于用户在系统中设定的角色而不是用户的身份。一般来说&#xff0c;RBAC模型定义角色为组织中的一项工作职责&#xff0c;RBAC系统给角色而不是给单独的用户分配访问权。用户根据他们的职责被静态地或动态地分配给不同的角色。 RBAC模型间的关…...

MFC中的Button修改颜色的方法

添加工具箱下面的MFC Button Control控件&#xff08;不使用普通的Button控件&#xff09;&#xff1b;给按键添加变量&#xff1a;m_MFCButton1&#xff0c;变量类型&#xff08;默认&#xff09;为&#xff1a;CMFCButton&#xff1b;testDlg.cpp中初始化中添加如下代码&…...

【算法】选择排序

选择排序 选择排序代码实现代码优化 排序&#xff1a; 排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 稳定性&#xff1a; 假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的记录&…...

golang之context实用记录

简言 WithCancel()函数接受一个 Context 并返回其子Context和取消函数cancel 新创建协程中传入子Context做参数&#xff0c;且需监控子Context的Done通道&#xff0c;若收到消息&#xff0c;则退出 需要新协程结束时&#xff0c;在外面调用 cancel 函数&#xff0c;即会往子C…...

音视频FFmpeg简单理解学习,必学技术

FFmpeg是一个开源的多媒体框架&#xff0c;它包含了一个用于音频和视频编解码的库。它可以执行各种多媒体操作&#xff0c;如格式转换、视频剪辑、音频处理等。可以用来记录、转换数字音频、视频&#xff0c;并能将其转化为流的开源计算机程序。 FFmpeg的结构 默认的编译会生成…...

一款内网信息收集利用工具

FuckDomainMini 简介 这是一款基于java开发Windows的内网信息收集、利用工具 可以节省您的信息收集所花费的&#xff0c;又或者是做免杀所花费的时间 现在这个版本是先行版本&#xff0c;目前先行版只有一个功能&#xff0c;更多的功能还在调试与开发中。 尽情期待&#x…...

数据库表的操作

目录 一、表的创建 1、创建语法 2、创建案例 二、查看表结构 三、修改表 1、修改表名 2、添加记录 3、修改列属性 4、添加列&#xff08;字段&#xff09; 5、删除列&#xff08;字段&#xff09; 6、修改列名字 四、删除表 五、修改表结构的风险 1、风险 2、建议 一、表的创建…...

Golang开发--channel的使用

在 Go 语言中&#xff0c;channel&#xff08;通道&#xff09;是一种用于在 goroutine 之间进行通信和同步的并发原语。它提供了一种安全且简单的方式来传递数据。 通道的详细描述和使用方法 1.定义通道&#xff1a; 通道是通过使用 make 函数来创建的。通道有特定的类型&am…...

SQL sever中表管理

目录 一、创建表&#xff1a; 1.1语法格式&#xff1a; 1.2示例&#xff1a; 二、修改表&#xff1a; 2.1语法格式&#xff1a; 2.2示例&#xff1a; 三、删除表&#xff1a; 3.1语法格式&#xff1a; 3.2示例&#xff1a; 四、查询表&#xff1a; 4.1语法格式&…...

CSSoverflow 属性

overflow 属性用于设置当元素中的内容溢出后的情况。 值得注意的是: 所谓溢出&#xff0c;是指子元素的大小&#xff08;包括文本、元素或图片等&#xff09;超出父元素的区域&#xff0c;会有一部分内容显示在父元素所在的区域外。 属性值描述visible默认值。内容不会被修剪&a…...

08:STM32----DMA数据转运

目录 1:简历 2:存储器映像 3:DMA基本结构 4: DMA转运的条件 5:DMA请求 A:DMA数据转运 1:连接图 2:数据转运DMA 3:函数介绍 4:步骤 5:代码 B:DMAAD多通道 1:连接图 2:结构图 3:函数介绍 4:代码 1:简历 DMA&#xff08;Direct Memory Access&#xff09;直接存储…...

Golang 程序漏洞检测利器 govulncheck(二):漏洞数据库详解

上一篇文章详细介绍了 Golang 程序漏洞扫描工具 govulncheck 的使用方法&#xff0c;govulncheck 强大功能的背后&#xff0c;离不开 Go 漏洞数据库&#xff08;Go vulnerability database&#xff09;的支持&#xff0c;接下来详细讲解下 Go 漏洞数据库相关的知识。 Go 漏洞数…...

[JDK8下的HashMap类应用及源码分析] 数据结构、哈希碰撞、链表变红黑树

系列文章目录 [Java基础] StringBuffer 和 StringBuilder 类应用及源码分析 [Java基础] 数组应用及源码分析 [Java基础] String&#xff0c;分析内存地址&#xff0c;源码 [JDK8环境下的HashMap类应用及源码分析] 第一篇 空构造函数初始化 [JDK8环境下的HashMap类应用及源码分…...

高等数学刷题

两个公式本质都是相同的 Π/2 1^∞类型...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界&#xff0c;看笔记好好学多敲多打&#xff0c;每个人都是大神&#xff01; 题目&#xff1a;KubeSphere 容器平台高可用&#xff1a;环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

【JavaEE】-- HTTP

1. HTTP是什么&#xff1f; HTTP&#xff08;全称为"超文本传输协议"&#xff09;是一种应用非常广泛的应用层协议&#xff0c;HTTP是基于TCP协议的一种应用层协议。 应用层协议&#xff1a;是计算机网络协议栈中最高层的协议&#xff0c;它定义了运行在不同主机上…...

Linux简单的操作

ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡&#xff08;如 HAProxy、AWS NLB、阿里 SLB&#xff09;发起上游连接时&#xff0c;将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后&#xff0c;ngx_stream_realip_module 从中提取原始信息…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文全面剖析RNN核心原理&#xff0c;深入讲解梯度消失/爆炸问题&#xff0c;并通过LSTM/GRU结构实现解决方案&#xff0c;提供时间序列预测和文本生成…...

ip子接口配置及删除

配置永久生效的子接口&#xff0c;2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...

【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制

使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下&#xff0c;限制某个 IP 的访问频率是非常重要的&#xff0c;可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案&#xff0c;使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...

从面试角度回答Android中ContentProvider启动原理

Android中ContentProvider原理的面试角度解析&#xff0c;分为​​已启动​​和​​未启动​​两种场景&#xff1a; 一、ContentProvider已启动的情况 1. ​​核心流程​​ ​​触发条件​​&#xff1a;当其他组件&#xff08;如Activity、Service&#xff09;通过ContentR…...

CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!

本文介绍了一种名为AnomalyAny的创新框架&#xff0c;该方法利用Stable Diffusion的强大生成能力&#xff0c;仅需单个正常样本和文本描述&#xff0c;即可生成逼真且多样化的异常样本&#xff0c;有效解决了视觉异常检测中异常样本稀缺的难题&#xff0c;为工业质检、医疗影像…...