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 = sys_tm.date().year();
// int month = sys_tm.date().month();
// int day = sys_tm.date().day();//时分秒int hour = sys_tm.time().hour();int min = sys_tm.time().minute();int sec = sys_tm.time().second();
// qDebug() << "系统时间:" << hour << ":" << min << ":" << sec;QString settime = timeEdit->text();this->timeLab->setText(sys_tm.toString("yyyy-mm-dd hh:mm:ss"));splitTime();QString readtxt =this->txt_edit->toPlainText();vector<int> :: iterator iter = split.begin();if(*(iter++) == hour && *(iter++) == min && *iter == sec){speech->say(this->txt_edit->toPlainText());}}
}Clock_Timer::Clock_Timer(QWidget *parent) :QWidget(parent),ui(new Ui::Clock_Timer)
{ui->setupUi(this);this->resize(800,700);this->setWindowFlags(Qt :: FramelessWindowHint);
// this->setWindowTitle("小淼子快起床了");//显示系统时间标签timeLab = new QLabel(this);timeLab->move(30,20);timeLab->resize(300,60);timeLab->setText("系统时间");timeLab->setFont(QFont("楷体",16));timeLab->setStyleSheet("background-color:skyblue");//启动按钮startBtn = new QPushButton(this);startBtn->setText("启动");startBtn->move(600,50);startBtn->resize(QSize(60,40));connect(startBtn,&QPushButton :: clicked,this,&Clock_Timer :: startRecTime);//停止按钮stopBtn = new QPushButton(this);stopBtn->resize(startBtn->size());stopBtn->move(startBtn->x() + startBtn->width() + 20,startBtn->y());stopBtn->setText("停止");stopBtn->setEnabled(false);connect(stopBtn,&QPushButton :: clicked,this,&Clock_Timer :: stopRecTime);//用户输入时间单行编辑器timeEdit = new QLineEdit(this);timeEdit->move(400,timeLab->y());timeEdit->setFont(QFont("楷体",16));timeEdit->resize(200,80);timeEdit->setPlaceholderText("时:分:秒");//用户输入语音播报文本编辑器txt_edit = new QTextEdit(this);txt_edit->move(0,200);txt_edit->resize(QSize(this->width(),this->height() - 200));txt_edit->setFont(QFont("楷体",20));//语音播报speech = new QTextToSpeech(this);}void Clock_Timer::mouseMoveEvent(QMouseEvent *event)
{if(event->buttons() == Qt :: LeftButton){this->move(event->globalPos() - startPos);}}void Clock_Timer::mousePressEvent(QMouseEvent *event)
{if(event->buttons() == Qt :: LeftButton){this->startPos = event->globalPos() - this->pos();}else if(event->buttons() == Qt :: RightButton){int ret = QMessageBox :: question(this,"确认","是否要关闭界面",QMessageBox :: Yes | QMessageBox :: No,QMessageBox :: No);if(ret == QMessageBox :: Yes){this->close();}}}Clock_Timer::~Clock_Timer()
{delete ui;
}//按下启动按钮后的事件处理函数
void Clock_Timer::startRecTime()
{
// qDebug() << this->timeEdit->text();if(this->timeEdit->text() == ""){QMessageBox :: warning(this,"警告","无输入",QMessageBox :: Ok,QMessageBox :: Ok);return;}//点击启动后,解锁停止按钮,同时锁定启动按钮this->stopBtn->setEnabled(true);this->startBtn->setEnabled(false);this->timeEdit->setEnabled(false);this->txt_edit->setEnabled(false);//开启定时器time_id = this->startTimer(1000);
}//按下停止按钮后的事件处理函数
void Clock_Timer::stopRecTime()
{int ret = QMessageBox :: question(this,"提示","是否确认要停止定时器",QMessageBox :: Yes | QMessageBox :: No,QMessageBox :: Yes);if(ret == QMessageBox :: Yes){this->startBtn->setEnabled(true);this->stopBtn->setEnabled(false);this->timeEdit->setEnabled(true);this->txt_edit->setEnabled(true);//关闭定时器this->killTimer(time_id);}}//分割时分秒
void Clock_Timer :: splitTime()
{this->split.clear();QString temp = timeEdit->text();QStringList s = temp.split(":");QStringList :: iterator iter = s.begin();for(;iter != s.end();iter++){qDebug() << (*iter);split.push_back(iter->toInt());}
}
//头文件#ifndef CLOCK_TIMER_H
#define CLOCK_TIMER_H#include <QWidget>
#include <QPushButton>
#include <QLabel>
#include <QLineEdit>
#include <QTextEdit>
#include <QTime>
#include <QTextToSpeech>
#include <QDateTime>
#include <QMessageBox>
#include <vector>
#include <QDebug>
#include <QMouseEvent>using namespace std;
namespace Ui {
class Clock_Timer;
}class Clock_Timer : public QWidget
{Q_OBJECTvoid timerEvent(QTimerEvent *event); //时间事件处理函数public:explicit Clock_Timer(QWidget *parent = nullptr);void mouseMoveEvent(QMouseEvent *event);void mousePressEvent(QMouseEvent *event);~Clock_Timer();void splitTime();
public slots:void startRecTime();void stopRecTime();private:Ui::Clock_Timer *ui;QPushButton *startBtn; //启动按钮QPushButton *stopBtn; //停止按钮QLabel *timeLab; //系统获取时间QLineEdit *timeEdit; //记录用户输入的时间QTextEdit *txt_edit; //用户输入的播报内容QMessageBox *stopConfirm; //对话框,询问用户是否确认停止QTextToSpeech *speech;int time_id; //记录定时器IDQDateTime sys_tm; //记录系统时间vector<int> split;QPoint startPos; //记录鼠标起始点};#endif // CLOCK_TIMER_H
运行效果


相关文章:
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…...
js如何实现字符串反转?
聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 使用 split() 和 reverse() 方法⭐ 使用循环⭐ 使用递归⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这个专…...
Nmap 7.94 发布:新功能!
Nmap 的最新版本 7.94 在其 26 岁生日之际发布。 最重要的升级是在所有平台上将 Zenmap 和 Ndiff 从 Python 2 迁移到 Python 3。 这个新版本的 Nmap 7.94 进行了升级,进行了多项改进,修复了一些关键错误,并添加了新的 Npcap、操作系统指纹…...
【深入解析spring cloud gateway】08 Reactor 知识扫盲
一、响应式编程概述 1.1 背景知识 为了应对高并发服务器端开发场景,在2009 年,微软提出了一个更优雅地实现异步编程的方式——Reactive Programming,我们称之为响应式编程。随后,Netflix 和LightBend 公司提供了RxJava 和Akka S…...
常用ADB指令
ADB指令 1.查看版本 adb shell getprop|findstr fingerprint 2.查看应用包名 adb shell pm list packages 3.查看系统关键字 adb shell getprop|findstr oem/sn/user… 4.查看进程id adb shell ps -ef |grep appstore 5.启动服务 adb shell am startservice -n com.a…...
【HTML5高级第二篇】WebWorker多线程、EventSource事件推送、History历史操作
文章目录 一、多线程1.1 概述1.2 体会多线程1.3 多线程中数据传递和接收 二、事件推送2.1 概述2.2 onmessage 事件 三、history 一、多线程 1.1 概述 前端JS默认按照单线程去执行,一段时间内只能执行一件事情。举个栗子:比方说古代攻城游戏,…...
CentOS云服务器部署配置
1. 安装Mysql 1.1.确保服务器系统处于最新状态 [rootlocalhost ~]# yum -y update如果显示内容中含有 [rootlocalhost ~]# Complete! 说明更新完成 1.2.下载MySql安装包 rootlocalhost ~]# rpm -ivh http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm…...
深入解析Java中的数组复制:System.arraycopy、Arrays.copyOf和Arrays.copyOfRange
当涉及到在Java中处理数组时,有许多方法可供选择,其中一些包括System.arraycopy()、Arrays.copyOf()和Arrays.copyOfRange()。这些方法允许您在不同的数组之间复制数据,但它们之间有一些细微的差异。在本篇博客文章中,我们将深入探…...
libc和glibc有什么区别
libc(C Library)是一个常见的术语,指的是C语言的标准函数库,提供了许多函数和常量供C语言程序使用。在不同的操作系统中,libc可能是不同的,但是它们都实现了C语言的标准库函数。 glibc(GNU C L…...
基于SSM的在线云音乐系统
末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…...
构建高效的BFF(Backend for Frontend):优化前端与后端协作
面试题分享 2023最新面试合集链接 2023大厂面试题PDF 面试题PDF版本 java、python面试题 项目实战:AI文本 OCR识别最佳实践 AI Gamma一键生成PPT工具直达链接 玩转cloud Studio 在线编码神器 玩转 GPU AI绘画、AI讲话、翻译,GPU点亮AI想象空间 史上最全文档AI绘画stab…...
喜报 | 实力亮相2023服贸会,擎创科技斩获领军人物奖创新案例奖
近日,由中华人民共和国商务部、北京市人民政府共同主办的中国(北京)国际服务贸易交易会(简称服贸会)已圆满落幕。 本次会议中,发布了2023年度“数智影响力”征集活动获奖名单,擎创科技创始人兼CEO杨辰获企…...
科技革新自动驾驶:拓世AI智能助理携手跟您一起点亮未来之旅
科技改变生活,智能改变世界,近年来,随着科技的不断进步,政策和市场的赋能推动,自动驾驶已经成为当今社会最炙手可热的话题之一。从其中的技术发展趋势来看,我国自动驾驶模式正由单车智能向车路协同时代演进…...
【HCIE】01.IGP高级特性
高级特性:一条命令解决一个问题 OSPF快速收敛机制 发生故障重新计算拓扑的过程叫做收敛,设备现在本身就是PRC算法和I-SPF算法 PRC(针对叶子节点,叶子代表路由) 不需要命令配置,就是ospf的特性ÿ…...
知识大杂烩(uniapp)
首先声明:不敢保证都管用,这是我自己实践得来的。 box-shadow: 这段 CSS 样式代码用于创建一个阴影效果,它是通过 box-shadow 属性来实现的。让我解释一下这段代码的含义: - box-shadow: 这是 CSS 的属性,用于添加阴影…...
Jmeter压测监控体系搭建Docker+Influxdb+Grafana
章节目录: 一、背景介绍1.1 概述1.2 拓扑图 二、云服务器设置三、Docker3.1 概述3.2 搭建流程3.3 安装验证3.4 配置docker镜像加速3.5 取消sudo运行(可选操作) 四、InfluxDB4.1 镜像拉取4.2 运行数据库4.3 创建存储 jmeter 数据的库 五、Grafana5.1 镜像拉取5.2 关联…...
TDesign 点击高亮显示=》点击切换class类名
1. wx:for遍历数组 2. 在一行显示 2. 点击高亮...
容器编排学习(二)镜像制作和私有仓库介绍
一 Dockerfile 1 概述 commit的局限 很容易制作简单的镜像,但碰到复杂的情况就十分不方便例如碰到下面的情况需要设置默认的启动命令需要设置环境变量需要指定镜像开放某些特定的端口 Dockerfile就是解决这些问题的方法 Dockerfile是一种更强大的镜像制作方式…...
tcp记录
网络传输:大小端 Qt网络编程实现TCP通信 TCP/IP通讯与socket编程 Qt一步步搭建TcpServer1——封装QTcpServer,QTcpSocket qtcpserver官方文档 Python address already in use 服务器端的端口号和客户端的端口号没有关系 一般服务器是需要BIND指定端口号…...
IDEA中使用Java连接MySQL数据库的配置和使用方法
文章目录 IDE和必要配置数据库连接代码 IDE和必要配置 IDE:IntelliJ IDEA 2023.1 必要配置: 1、安装好JDK,并且配置环境变量 2、导入MYSQL数据库所需的驱动 如果没有导入,可以参考这篇文章IDEA中的MySQL数据库所需驱动包的下载和…...
【图灵完备(Turing Complete)】五、从逻辑门到LEG:指令集与条件跳转的构建
1. 从逻辑门到处理器:LEG架构的诞生之路 记得我第一次用面包板搭建简单逻辑电路时,连个LED灯闪烁都要折腾半天。而现在我们要做的,是把这些基础逻辑门像乐高积木一样拼接成真正的处理器核心。LEG架构的设计初衷就是要解决原始图灵机指令宽度受…...
如何7天免费使用Cursor Pro:无限制AI编程助手完整指南
如何7天免费使用Cursor Pro:无限制AI编程助手完整指南 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached your tri…...
ScanTailor Advanced:免费开源扫描文档处理终极指南
ScanTailor Advanced:免费开源扫描文档处理终极指南 【免费下载链接】scantailor-advanced ScanTailor Advanced is the version that merges the features of the ScanTailor Featured and ScanTailor Enhanced versions, brings new ones and fixes. 项目地址: …...
如何用Langchain来实现一个查询天气的AI智能体
上一篇,我们讲了如何用Langchain来搭建一个通义大语言模型应用。今天小编就来讲一讲如何用Langchain来实现一个查询天气的AI智能体。本文使用的大模型是智谱AI,采用Python代码来实现。我们需要先在官方网站申请一个开发的Key,在接下来的代码中…...
告别手动重标:基于Python脚本的Labelme数据集增强与JSON同步更新实战
1. 为什么我们需要自动化处理Labelme标注数据 做计算机视觉项目的朋友都知道,数据标注是个体力活。特别是使用Labelme这类工具进行语义分割标注时,每张图片都要手动勾勒物体轮廓,工作量巨大。更让人头疼的是,当我们对原始图片进行…...
Matlab与VeriStand无缝集成:开发环境配置全攻略
1. 环境准备:软件安装与版本匹配 搞过Matlab和VeriStand集成的朋友都知道,最头疼的不是写代码,而是环境配置。我当年第一次尝试时,光软件版本兼容性问题就折腾了两天。这里分享几个血泪教训: 首先Matlab和VeriStand的版…...
QGIS属性表关联Excel实战:5步搞定空间数据分析(附避坑指南)
QGIS属性表与Excel高效关联:从数据匹配到空间分析的完整指南 1. 为什么需要关联Excel与QGIS属性表? 在日常空间分析工作中,我们经常遇到这样的场景:拥有完整的空间数据(如行政区划边界),但关键分…...
CLIP-GmP-ViT-L-14模型部署保姆级教程:从零开始的Docker环境配置
CLIP-GmP-ViT-L-14模型部署保姆级教程:从零开始的Docker环境配置 你是不是也对那些能看懂图片的AI模型感到好奇?比如,你上传一张猫的照片,AI不仅能认出是猫,还能告诉你这是橘猫,正在晒太阳。CLIP-GmP-ViT-…...
3大突破!LxgwWenKai字体效率革命:从代码阅读到多场景适配全指南
3大突破!LxgwWenKai字体效率革命:从代码阅读到多场景适配全指南 【免费下载链接】LxgwWenKai LxgwWenKai: 这是一个开源的中文字体项目,提供了多种版本的字体文件,适用于不同的使用场景,包括屏幕阅读、轻便版、GB规范字…...
保姆级教程:用SSC Tool 5.13为先楫HPM6E00EVK生成8轴EtherCAT从站代码(附XML配置避坑点)
先楫HPM6E00EVK实现8轴EtherCAT从站开发实战指南 在工业自动化领域,多轴协同控制的需求日益增长。对于嵌入式开发者而言,如何快速搭建一个稳定可靠的EtherCAT从站系统成为关键挑战。本文将基于先楫HPM6E00EVK开发板,详细解析从代码生成到实际…...
