QT 一个简易闹钟

1 效果图

pro

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 += \icon.qrc

.main

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

.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QIcon>   //
#include <QLabel>  //标签类
#include <QColor>  //颜色类
#include <QTimer>  //定时器类
#include <QTime>   //时间类
#include <QDateTime> //时间事件类
#include <QLineEdit> //行标签
#include <QPushButton>//按钮类
#include <QSize>
#include <QTextEdit>
#include <QMouseEvent> //鼠标事件
#include <QTextToSpeech>
#include <QString>
#include <QPalette>
#include <QImage>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();//重写定时器事件处理函数void timerEvent(QTimerEvent *event)override;private slots:void alarm_start();  //自定义处理 闹钟启动 信号函数的声明void alarm_stop();   //自定义处理 停止闹钟 信号函数声明private:Ui::Widget *ui;//将组件设置为私有成员QLabel *localtimelab;QLineEdit *alarm_edit;QPushButton *startbtn;QPushButton *stopbtn;QTextEdit *speakEdit;//获取闹铃时间QString alarm_time;int timer_id;    //定义一个定时器的id(基于事件处理函数)QTextToSpeech *speaker;//设置播报员
};
#endif // WIDGET_H

.cpp

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//1、总体框架搭建this->setFixedSize(690,445);//2、设置窗口标题、Iconthis->setWindowTitle("小桐闹铃");this->setWindowIcon(QIcon(":/icon/Alarm.jpg"));//3、组件设置//展示实时时间localtimelab = new QLabel(this);localtimelab->resize(400,100);localtimelab->move(30,30);localtimelab->setStyleSheet("QLabel{border:2px solid rgb(200,200,200);font-size:20px;}");localtimelab->setAlignment(Qt::AlignCenter);  //标签文本对齐//创建闹铃时间alarm_edit = new QLineEdit(this);alarm_edit->setPlaceholderText("请输入闹铃时间...");alarm_edit->resize(200,50);alarm_edit->move(localtimelab->width()+localtimelab->x()+30,localtimelab->y());alarm_edit->setStyleSheet("QLineEdit{border:2px solid rgb(200,200,200);}");alarm_edit->setAlignment(Qt::AlignCenter);//创建启动按钮startbtn = new QPushButton("启动",this);startbtn->resize(QSize(90,40));startbtn->move(alarm_edit->x(),alarm_edit->y()+60);connect(startbtn,&QPushButton::clicked,this,&Widget::alarm_start);    //将信号连接到槽函数//创建停止按钮stopbtn = new QPushButton("停止",this);stopbtn->resize(QSize(90,40));stopbtn->move(startbtn->x()+startbtn->width()+20,startbtn->y());stopbtn->setEnabled(false);connect(stopbtn,&QPushButton::clicked,this,&Widget::alarm_stop);    //将信号连接到槽函数//创建播报文本speakEdit = new QTextEdit(this);speakEdit->resize(630,250);speakEdit->move(localtimelab->x(),startbtn->y()+startbtn->height()+30);speakEdit->setPlaceholderText("请输入闹铃内容");speakEdit->setAlignment(Qt::AlignCenter);  //标签文本对齐//实例化一个播报员speaker = new QTextToSpeech(this);timer_id = this->startTimer(1000);
}Widget::~Widget()
{delete ui;
}//启动闹铃的槽函数
void Widget::alarm_start()
{alarm_time = alarm_edit->text();  //将闹铃时间保存到alarm_time字符串中startbtn->setEnabled(false);alarm_edit->setEnabled(false);speakEdit->setEnabled(false);stopbtn->setEnabled(true);
}//停止闹铃的槽函数
void Widget::alarm_stop()
{startbtn->setEnabled(true);alarm_edit->setEnabled(true);speakEdit->setEnabled(true);stopbtn->setEnabled(false);
}//重写timerEvent函数
void Widget::timerEvent(QTimerEvent *event)
{if(event->timerId() == timer_id){QDateTime local_time = QDateTime::currentDateTime();  //获取本地时间保存到local_time中localtimelab->setText(local_time.toString("yyyy-MM-dd hh:mm:ss"));if(alarm_time == local_time.toString("hh:mm:ss")){speaker->say(speakEdit->toPlainText());}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/99119.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

测试理论与方法----测试流程第三个环节:设计测试用例

测试流程第三个环节&#xff1a;设计测试用例&#xff1a;怎么测<——>测试需求的提取&#xff1a;测什么 ### 5、测试用例 描述&#xff1a;测试用例(TestCase)&#xff1a;是一份关于【具体测试步骤】的文档&#xff0c;是为了达到最佳的测试效果或高效揭露软件中潜藏的…

使用C++操作Redis客户端

"Who can say where the path will go?" 前面我们花了很大的篇幅&#xff0c;讲解了redis中常见常使用的五种数据结构&#xff0c;以及五种数据结构的操作和redis命令。不过在日常开发中&#xff0c;我们的这些操作都是在redis为我们提供的客户端中的&#xff0c;就…

Xilinx UltraScale架构之可配置逻辑块CLB

目录 一、概览 二、UltraScale架构 2.1 UltraScale/UltraScale特点 2.2 与7系列CLB差异 三、 CLB结构 3.1 LUT 3.2 FF 3.3 多路选择器Multiplexers 3.4 进位链Carry Chain 四、应用 4.1 分布式RAM 4.2 移位寄存器 4.3 进位链Carry Chain 五、参考资料 一、概览 二…

WSL Opencv with_ffmpeg conan1.60.0

我是ubuntu18. self.options[“opencv”].with_ffmpeg True 关键是gcc版本需要conan支持&#xff0c;比如我的是&#xff1a; compilergcc compiler.version7.5 此外还需要安装系统所需库&#xff1a; https://qq742971636.blog.csdn.net/article/details/132559789 甚至来…

最小生成树Kruskal、Prim算法C++

什么是最小生成树 连通图&#xff1a; 在无向图中&#xff0c;若从顶点v1到顶点v2有路径&#xff0c;则称顶点v1和顶点v2是连通的。如果图中任意一对顶点都是连通的&#xff0c;则称此图为连通图。 生成树&#xff1a; 一个连通图的最小连通子图称作为图的生成树。有n个顶点的…

【分布式搜索引擎es】

文章目录 数据搜索DSL实现查询文档搜索结果处理 RestClient实现 旅游案例酒店搜索和分页酒店结果过滤我周边的酒店酒店竞价排名 elasticsearch最擅长的是 搜索和 数据分析。 数据搜索 DSL实现 查询文档 常见的查询类型包括&#xff1a; 查询所有&#xff1a;查询出所有数…

ES查询报错内容长度超过104857600

项目场景&#xff1a; 使用 ElasticsearchRestTemplate 或者使用 RestHighLevelClient 查询 ES 报错 内容长度超过 104857600 问题描述 ES 查询报错 entiity content is too long xxx for the configured buffer limit 104857600 Overridepublic void esQuery() {restHighL…

怎样将几个pdf合并?

在日常工作中&#xff0c;我们经常需要处理大量的PDF文件。有时候&#xff0c;我们需要将多个PDF文件合并成一个文件&#xff0c;以便于快速传输或方便查阅。虽然PDF文件本身不能进行编辑&#xff0c;但是借助专业的PDF编辑软件&#xff0c;我们可以轻松地实现将多个PDF文件合并…

Vue + Element UI 前端篇(六):更换皮肤主题

自定义主题 命令行主题工具 1.安装主题工具 首先安装「主题生成工具」&#xff0c;可以全局安装或者安装在当前项目下&#xff0c;推荐安装在项目里&#xff0c;方便别人 clone 项目时能直接安装依赖并启动。 yarn add element-theme --dev 2.安装chalk主题 安装白垩主题…

2023年行研行业研究报告

第一章 行业概述 1.1 行研行业 行业定义为同一类别的经济活动&#xff0c;这涉及生产相似产品、应用相同生产工艺或提供同类服务的集合&#xff0c;如食品饮料行业、服饰行业、机械制造行业、金融服务行业和移动互联网行业等。 为满足全球金融业的需求&#xff0c;1999年8月…

Redis 7 第六讲 主从模式(replica)架构篇

🌹🌹🌹 此篇开始进入架构篇范围(❤艸`❤) 理论 即主从复制,master以写为主,Slave以读为主。当master数据变化的时候,自动将新的数据异步同步到其它slave数据库。 使用场景 读写分离 容灾备份数据备份水平扩容主从架构 演示案例 注:masterauth、replicaof主…

Django学习

1、启动项目 python manage.py runserversettings.py