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文件夹…

i8080/TTL/LVDS/MIPI接口的差别

EYA-DISPLAY i8080、TTL、LVDS和MIPI都是用于数据传输的接口协议&#xff0c;但它们在传输数据类型和使用场景上存在一些差异。 i8080接口是一种并行数据接口&#xff0c;通常用于连接CPU和慢速外设。它最初被设计用于IBM的PC和AT计算机&#xff0c;现已被广泛用于各种计算机和…

VSCODE CMAKE C++ 工程调试, C++不以科学计数法输出并控制小数位数

1. VSCODE调试CMAKE工程配置1.1 修改CMakeLists.txt文件1.2. 程序中1.3. launch.json配置1.4 开始调试1.5 注意 2. C设置输出浮点数且保留位数固定 1. VSCODE调试CMAKE工程配置 1.1 修改CMakeLists.txt文件 加这一句 set(CMAKE_BUILD_TYPE "Debug")1.2. 程序中 在…

python分支结构的花样玩法(二)

除了上述的基本用法&#xff0c;还可以使用更复杂的条件表达式&#xff0c;包括使用 not 和 or 来组合条件&#xff0c;以及使用 in 和 not in 来检查元素是否在&#xff08;或不在&#xff09;某个集合中。 例如&#xff1a; pythonif not condition1 or not condition2: # …

Nginx 学习(五)Tomcat 服务器

1 案例1&#xff1a;安装部署Tomcat服务器 1.1 问题 本案例要求部署Tomcat服务器&#xff0c;具体要求如下&#xff1a; 安装部署JDK基础环境安装部署Tomcat服务器创建JSP测试页面 然后客户机访问此Web服务器验证效果&#xff1a; 使用火狐浏览器访问Tomcat服务器的8080端…

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…

Golang 获取本地 IP 地址方法

在 Golang 中&#xff0c;使用 net 包可以很方便地获取到本机IP地址。 借助 net.InterfaceAddrs 方法 简单示例代码如下&#xff1a; package mainimport ("fmt""net" )func main() {addrList, err : net.InterfaceAddrs()if err ! nil {panic(err)}for…

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

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

OpenPose

OpenPose Doc - Installation - Prerequisites

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;…

【Linux】Epoll Reactor【反应堆】模式的工作流程

Reactor模式的工作流程 主线程往epoll内核事件表中注册socket上的就绪事件。主线程调用epoll_wait等待socket上有数据可读。当socket上有数据可读时&#xff0c;epoll_wait通知主线程。主线程将socket可读事件放入请求队列。睡眠在请求队列上的某个工作线程被唤醒&#xff0c;…

ubuntu设置sudo免密

前提&#xff1a;有root权限 本质是修改/etc/sudoers 文件&#xff0c;但直接编辑这个文件容易改错造成系统异常&#xff0c;因此一般使用sudo visudo命令修改&#xff0c;这个命令保存时会检查文件格式&#xff0c;该命令会使用默认文本编辑器把/etc/sudoers 读到一个临时文件…

2023数学建模国赛C题思路--蔬菜类商品的自动定价与补货决策

C 题 蔬菜类商品的自动定价与补货决策 在生鲜商超中&#xff0c;一般蔬菜类商品的保鲜期都比较短&#xff0c;且品相随销售时间的增加而变差&#xff0c; 大部分品种如当日未售出&#xff0c;隔日就无法再售。因此&#xff0c;商超通常会根据各商品的历史销售和需 求情况每天进…

Android MediaRecorder录音

1. 简介 在android中录制音频有两种方式&#xff0c;MediaRecorder和AudioRecord。两者的区别如下&#xff1a; MediaRecorder 简单方便&#xff0c;不需要理会中间录制过程&#xff0c;结束录制后可以直接得到音频文件进行播放&#xff1b;录制的音频文件是经过压缩的&#…