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 += target

头文件

widght.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QDebug>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <QTextEdit>
#include <QTextToSpeech>
#include <QTimer>
#include <QDateTime>
#include <QThread>
#include <QTimerEvent>
//#include <QMediaPlayer>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:Ui::Widget *ui;//定义一个lable指针, 当前时间QLabel *current_time_lab;//定义一个行编辑器指针, 闹钟QLineEdit *clock_edit;//定义一个按钮指针, 启动QPushButton *start_clock_btn;//定义一个停止闹钟, 关闭QPushButton *stop_clock_btn;//定义一个文本编辑器QTextEdit *text_edit;//定义一个闹钟语音播放者QTextToSpeech *clock_speecher;//定义一个定时器指针QTimer *clock_timer;QTimer *clock_timer2;int time_id;public slots:void start_slot();void cklock_slot();void stop_slot();};
#endif // WIDGET_H

源文件

main.cpp

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

widget.cpp

#include "widget.h"
#include "ui_widget.h"int flag = 0;
int clock_flag = 0;
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//组件实例化current_time_lab = new QLabel(this);clock_edit = new QLineEdit(this);start_clock_btn = new QPushButton("启动", this);stop_clock_btn = new QPushButton("停止", this);text_edit = new QTextEdit(this);clock_speecher = new QTextToSpeech();clock_timer = new QTimer(this);clock_timer2 = new QTimer(this);//设置页面布局//固定窗口大小this->setFixedSize(500,400);//this->setStyleSheet("background-img");current_time_lab->resize(300, 70);current_time_lab->move(40,30);current_time_lab->setStyleSheet("background-color:rgba(137, 199, 117, 0.7);font:幼圆; font-size:26px;");current_time_lab->setAlignment(Qt::AlignCenter);clock_edit->resize(100, 30);//clock_edit->setPlaceholderText("定时时间");clock_edit->move(this->width()-140, 30);clock_edit->setAlignment(Qt::AlignHCenter);start_clock_btn->resize(45, 30);start_clock_btn->move(clock_edit->x(), clock_edit->y()+40);start_clock_btn->setStyleSheet("font:幼圆; font-size:10px; padding:2px");stop_clock_btn->resize(start_clock_btn->size());stop_clock_btn->move(start_clock_btn->x()+55, start_clock_btn->y());stop_clock_btn->setStyleSheet("font:幼圆; font-size:10px; padding:2px");text_edit->resize(this->width()-80, 220);text_edit->move(current_time_lab->x(), current_time_lab->y()+current_time_lab->height()+40);stop_clock_btn->setDisabled(true);clock_timer->start(1000);connect(clock_timer, &QTimer::timeout, this, [&](){QDateTime date_time = QDateTime::currentDateTime();current_time_lab->setText(date_time.toString("yyyy-MM-dd hh:mm:ss"));QTime currenttime = QTime::currentTime();QString time = currenttime.toString("hh:mm:ss");if(time <= clock_edit->text()){clock_flag = 0;}});connect(clock_timer, &QTimer::timeout, this, &Widget::cklock_slot);connect(start_clock_btn, &QPushButton::clicked, this, &Widget::start_slot);connect(stop_clock_btn, &QPushButton::clicked, this, &Widget::stop_slot);//time_id = startTimer(0);}Widget::~Widget()
{delete ui;
}void Widget::start_slot()
{start_clock_btn->setEnabled(false);stop_clock_btn->setEnabled(true);clock_edit->setDisabled(true);}void Widget::cklock_slot()
{if(!start_clock_btn->isEnabled()){QTime currenttime = QTime::currentTime();QString time = currenttime.toString("hh:mm:ss");if(time >= clock_edit->text()&& clock_flag == 0){if(flag == 0){clock_speecher->say(text_edit->toPlainText());clock_timer2->start(2000);connect(clock_timer2, &QTimer::timeout, [](){flag = 0;});}flag =1;}}elseclock_speecher->stop();}void Widget::stop_slot()
{//clock_speecher->stop();start_clock_btn->setEnabled(true);stop_clock_btn->setEnabled(false);clock_edit->setEnabled(true);clock_flag = 1;
}//定时器事件处理函数的实现
void Widget::timerEvent(QTimerEvent *event)
{if(event->timerId() == time_id){//static int num = 0;//ui->eventtime->setNum(++num);  //setNum()函数是设置文本内容数字QDateTime sys_dt = QDateTime::currentDateTime(); //获取当前系统的日期时间this->current_time_lab->setText(sys_dt.toString("yyyy-MM-dd hh:mm:ss"));this->current_time_lab->setAlignment(Qt::AlignCenter);if(!start_clock_btn->isEnabled()){QTime currenttime = QTime::currentTime();QString time = currenttime.toString("hh:mm:ss");if(time == clock_edit->text()){
//               if(flag == 0)
//               {clock_speecher->say(text_edit->toPlainText());//                clock_timer2->start(2000);//                connect(clock_timer2, &QTimer::timeout, [](){//                    flag = 0;});//}//flag =1;}}elseclock_speecher->stop();}
}

Qt简易闹钟

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

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

相关文章

Json“牵手”当当网商品详情数据方法,当当商品详情API接口,当当API申请指南

当当网是知名的综合性网上购物商城&#xff0c;由国内著名出版机构科文公司、美国老虎基金、美国IDG集团、卢森堡剑桥集团、亚洲创业投资基金&#xff08;原名软银中国创业基金&#xff09;共同投资成立1。 当当网从1999年11月正式开通&#xff0c;已从早期的网上卖书拓展到网…

【JAVA】Object类与抽象类

作者主页&#xff1a;paper jie_的博客 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文录入于《JAVASE语法系列》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心打造的。笔者用重金(时间和…

Linux安装nginx教程

目录 一、Nginx下载 二、安装步骤 1、在 /docker目录下新建 nginx 文件夹 2、将解压包移动到nginx目录下并解压到nginx目录 3、进入 nginx目录&#xff0c;找到 configure 4、运行 configure&#xff0c;命令 5、安装 6、查看根目录 7、进入Nginx目录下的conf文件夹…

Web存储

目录 什么是 HTML5 Web 存储? 方法 cookie webStorage 会话存储 sessionStorage 本地存储localStorage 什么是 HTML5 Web 存储? 使用HTML5可以在本地存储用户的浏览数据。 早些时候,本地存储使用的是 cookie。但是Web 存储需要更加的安全与快速. 这些数据不会被保存在服…

下单时如何保证数据一致性?

原创 哪吒 哪吒编程 2023-09-07 08:03 发表于辽宁 收录于合集#Redis11个 &#xff08;给哪吒编程加星标&#xff0c;提高Java技能&#xff09; 大家好&#xff0c;我是哪吒。 在前几篇文章中&#xff0c;提到了Redis实现排行榜、Redis数据缓存策略&#xff0c;让我们对Redis…

VSCode学习笔记一:添加代码模板

一目了然 1 简述2 设置模板3 Global Snippets file示例 1 简述 问&#xff1a;为什么要设置代码模板&#xff1f; 答&#xff1a;编程语言是有个性的&#xff0c;不同语言的演讲风格是不一样的。 旁白&#xff1a;我不懂&#xff1f;&#xff01; 问&#xff1a;为什么要设置…

qt作业day4

//clock_exercise.cpp#include "clock_timer.h" #include "ui_clock_timer.h"//时间事件处理函数 void Clock_Timer::timerEvent(QTimerEvent *event) {if(event->timerId() time_id){sys_tm QDateTime :: currentDateTime(); // int year sy…

【c++】如何有效地利用命名空间?

​ &#x1f331;博客主页&#xff1a;青竹雾色间 &#x1f618;博客制作不易欢迎各位&#x1f44d;点赞⭐收藏➕关注 ​✨人生如寄&#xff0c;多忧何为 ✨ 目录 前言什么是命名空间&#xff1f;命名空间的语法命名空间的使用避免命名冲突命名空间的嵌套总结 前言 当谈到C编…

直播APP源码搭建:核心的服务器系统

在现代科技的推动下&#xff0c;网络衍生出了各种各样的技术&#xff0c;每个技术都被应用到需要的APP上&#xff0c;直播APP源码搭建出来的APP就是其中的一个&#xff0c;然而&#xff0c;这些技术能够成功的在直播APP源码搭建的APP中稳定的为用户们提供功能与服务&#xff0c…

芯科蓝牙BG27开发笔记-新建示例工程

此笔记的必要性 芯科的官方资料很丰富&#xff0c;并且ssv5中能方便索引到所需文档&#xff0c;不过大而全的问题就是找不到合适的切入点&#xff0c;更不会有本地化比较好的中文的系统的教程了。往往看到一个starting guide&#xff0c;会延伸其他starting guide&#xff0c;…

Docker从认识到实践再到底层原理(四-2)|Docker镜像仓库实战案例

前言 那么这里博主先安利一些干货满满的专栏了&#xff01; 首先是博主的高质量博客的汇总&#xff0c;这个专栏里面的博客&#xff0c;都是博主最最用心写的一部分&#xff0c;干货满满&#xff0c;希望对大家有帮助。 高质量博客汇总 然后就是博主最近最花时间的一个专栏…

污水处理厂3D数字孪生三维可视系统降低设备风险隐患

当相对传统与保守的水务行业&#xff0c;与激进与开放的互联网发生碰撞之后&#xff0c;产生了最好的一个名词是&#xff1a;“智慧水务”&#xff0c;谈及智慧水务&#xff0c;自然免不了当下最具热度的技术“元宇宙”&#xff0c;水资源再生是我国追求高质量发展的新策略&…

软件测试/测试开发丨Selenium Web自动化多浏览器处理

点此获取更多相关资料 本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接&#xff1a;https://ceshiren.com/t/topic/27185 一、多浏览器测试介绍 1.1、多浏览器测试背景 用户使用的浏览器(firefox,chrome,IE 等)web 应用应该能在任何浏览器上正常的工作&#xff0c;这样…

springboot整合elasticsearch使用案例

引入依赖 <dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-high-level-client</artifactId> </dependency> 添加注入 import org.apache.http.HttpHost; import org.elasticsearch.client.Res…

2594. 修车的最少时间

文章目录 Tag题目来源题目解读解题思路方法一&#xff1a;二分枚举答案 写在最后 Tag 【二分枚举答案】【数组】 题目来源 2594. 修车的最少时间 题目解读 给你一个表示机械工能力的数组 ranks&#xff0c;ranks[i] 表示第 i 位机械工可以在 r a n k s [ i ] ∗ n 2 ranks[…

[docker]笔记-存储管理

1、docker数据存储分为非永久性存储和永久性存储。 非永久性存储&#xff1a;容器创建会默认创建非永久性存储&#xff0c;该存储从属于容器&#xff0c;生命周期与容器相同&#xff0c;会随着容器的关闭而消失&#xff08;可理解为内存中数据&#xff0c;会随关机而消失&…

PHP表单token验证防CSRF攻击

在PHP中&#xff0c;表单token是一种安全机制&#xff0c;用于防止跨站请求伪造&#xff08;CSRF&#xff09;攻击。 CSRF攻击是一种利用用户身份在未经授权的情况下执行非法操作的攻击方式。 表单token的原理是在表单中生成一个随机的token&#xff0c;并将其存储在服务器端…

12. 自动化项目实战

目录 1. 登录测试 2. 测试首页的帖子列表数不为0 3. 帖子详情页校验 4. 发布帖子 5. 退出登录 自动化项目实施的基本流程如下图所示&#xff1a; 手工测试用例、自动化测试用例。 1. 登录测试 校验登录后主页显示的用户名称和登录时输入的用户名是否相等。 public class…

自动化运维工具Ansible教程(二)【进阶篇】

文章目录 前言Ansible 入门到精通自动化运维工具Ansible教程(一)【入门篇】自动化运维工具Ansible教程(二)【进阶篇】精通篇 进阶篇1. Ansible 的高级主题&#xff08;例如&#xff1a;角色、动态清单、变量管理等&#xff09;**1. 角色&#xff08;Roles&#xff09;**&#x…

WangEditor在Vue前端的应用

1、在Vue项目中安装WangEditor 对于Vue2&#xff1a; npm install wangeditor/editor-for-vue --save 或者 yarn add wangeditor/editor-for-vue 对于Vue3&#xff1a; npm install wangeditor/editor-for-vuenext --save 或者 yarn add wangeditor/editor-for-vuenext 2、将Wa…