qt day 5

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.h# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
----------------------------------------------------------------------
.h
----------------------------------------------------------------------
#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QLabel>
#include <QLineEdit>
#include <QTextEdit>
#include <QPushButton>
#include <QTimer>
#include <QTime>
#include <QTextToSpeech>
#include <QMouseEvent>class Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();void Localtime();void Clock_check();void Opbtn_Cli();void Clobtn_Cli();void mousePressEvent(QMouseEvent *event) override;void mouseMoveEvent(QMouseEvent *event) override;private://显示实施时间定时器QTimer *loct;QTimer *clotime;//界面组件QLabel *loctimlab;QLineEdit *clocklab;QPushButton *opbtn;QPushButton *clobtn;QTextEdit *txt;//时间比较int lhour = 0;int lmin = 0;int lsec = 0;int chour = 0;int cmin = 0;int csec = 0;//鼠标位置QPoint clipos;QPoint movpos;//播报员QTextToSpeech *sp = new QTextToSpeech(this);};
#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"Widget::Widget(QWidget *parent): QWidget(parent)
{this->setWindowFlag(Qt::FramelessWindowHint);this->resize(700,500);this->setStyleSheet("background-color:skyblue");this->setWindowOpacity(0.8);//创建显示当前时间文本框loctimlab = new QLabel(this);loctimlab->move(50,50);loctimlab->resize(350,100);loctimlab->setAlignment(Qt::AlignCenter);QFont ff;ff.setPointSize(20);loctimlab->setFont(QFont(ff));//创建定时时间文本框clocklab = new QLineEdit(this);clocklab->move(loctimlab->x()+loctimlab->width()+50,loctimlab->y());clocklab->resize(200,45);ff.setPointSize(16);clocklab->setAlignment(Qt::AlignHCenter);clocklab->setFont(QFont(ff));clocklab->setText("00 : 00 : 00");//创建开启按钮opbtn = new QPushButton(this);opbtn->move(clocklab->x(),clocklab->y()+clocklab->height()+10);opbtn->resize(75,45);opbtn->setText("开启");connect(opbtn,&QPushButton::clicked,this,&Widget::Opbtn_Cli);//创建停止按钮clobtn = new QPushButton(this);clobtn->move(clocklab->x()+opbtn->width()+50,clocklab->y()+clocklab->height()+10);clobtn->resize(75,45);clobtn->setText("停止");clobtn->setEnabled(0);connect(clobtn,&QPushButton::clicked,this,&Widget::Clobtn_Cli);//创建提示文本框txt = new QTextEdit(this);txt->move(loctimlab->x(),loctimlab->y()+loctimlab->height()+50);txt->resize(600,250);txt->setText("knocking!!!");//实例化定时器loct = new QTimer(this);loct->start(1000);clotime = new QTimer(this);//连接定时器与槽函数connect(loct,&QTimer::timeout,this,&Widget::Localtime);connect(clotime,&QTimer::timeout,this,&Widget::Clock_check);
}Widget::~Widget()
{
}//获取实时时间
void Widget::Localtime()
{//获取实时时间QTime ltime = QTime::currentTime();//把时间显示到文本框上Widget::loctimlab->setText(ltime.toString("hh : mm : ss"));//获取时间lhour = ltime.hour();lmin = ltime.minute();lsec = ltime.second();}//时间比较
void Widget::Clock_check()
{if(lhour == chour && lmin == cmin && lsec == csec){//阅读文本内容sp->say(txt->toPlainText());}
}//开启闹钟定时
void Widget::Opbtn_Cli()
{//启动定时器clotime->start(1000);//获取定时时间QString tt;QByteArray t;QByteArray tmp;tt = clocklab->text();t = tt.toUtf8();int j = 0;//获取小时数for(int i = 0;t[j] != ':';i++,j++){tmp[i] = t[j];}j++;chour = atoi(tmp);//获取分钟数for(int i = 0;t[j] != ':';i++,j++){tmp[i] = t[j];}j++;cmin = atoi(tmp);//获取秒数for(int i = 0;t[j] != ':';i++,j++){tmp[i] = t[j];}j++;csec = atoi(tmp);//设置其他为不可用opbtn->setEnabled(0);clocklab->setEnabled(0);txt->setEnabled(0);clobtn->setEnabled(1);}//停止按钮
void Widget::Clobtn_Cli()
{//设置按钮可用opbtn->setEnabled(1);clocklab->setEnabled(1);txt->setEnabled(1);clobtn->setEnabled(0);//停止定时器clotime->stop();
}void Widget::mousePressEvent(QMouseEvent *event)
{if(event->buttons() == Qt::LeftButton){clipos = event->pos();}else{this->close();}
}void Widget::mouseMoveEvent(QMouseEvent *event)
{this->move(event->globalPos()-clipos);
}

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

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

相关文章

vue可编辑表格

内容包含:校验。下拉框。输入框。日期控件 效果图 1.代码目录 2.index.js import SjjEditable from ./src/editable.vue // import Vue from vueSjjEditable.install = function (Vue) {Vue.component(SjjEditable.name, SjjEditable) }export default SjjEditable 3.util…

SpringMVC-学习笔记

文章目录 1.概述1.1 SpringMVC快速入门 2. 请求2.1 加载控制2.2 请求的映射路径2.3 get和post请求发送2.4 五种请求参数种类2.5 传递JSON数据2.6 日期类型参数传递 3.响应3.1 响应格式 4.REST风格4.1 介绍4.2 RESTful快速入门4.3 简化操作 1.概述 SpringMVC是一个基于Java的Web…

手写Mybatis:第8章-把反射用到出神入化

文章目录 一、目标&#xff1a;元对象反射类二、设计&#xff1a;元对象反射类三、实现&#xff1a;元对象反射类3.1 工程结构3.2 元对象反射类关系图3.3 反射调用者3.3.1 统一调用者接口3.3.2 方法调用者3.3.3 getter 调用者3.3.4 setter 调用者 3.4 属性命名和分解标记3.4.1 …

Django传递dataframe对象到前端网页

在django前端页面上展示的数据&#xff0c;还是使用django模板自带的语法 方式1 不推荐使用 直接使用 【df.to_html(indexFalse)】 使用to_html他会生成一个最基本的表格没有任何的样式&#xff0c;一点都不好看&#xff0c;如果有需要的话可以自行修改表格的样式&#xff0c;…

bazel远程缓存(Remote Cache)

原理 您可以将服务器设置为构建输出&#xff08;即这些操作输出&#xff09;的远程缓存。这些输出由输出文件名列表及其内容的哈希值组成。借助远程缓存&#xff0c;您可以重复使用其他用户的 build 中的构建输出&#xff0c;而不是在本地构建每个新输出。 增量构建极大的提升…

区块链技术与应用 - 学习笔记1【引言】

大家好&#xff0c;我是比特桃。本系列主要将我之前学习区块链技术时所做的笔记&#xff0c;进行统一的优化及整合。其中大量笔记源于视频课程&#xff1a;北京大学肖臻老师《区块链技术与应用》公开课。肖老师的课让我找回了求知若渴般的感觉&#xff0c;非常享受学习这门课的…

【大数据】Apache Iceberg 概述和源代码的构建

Apache Iceberg 概述和源代码的构建 1.数据湖的解决方案 - Iceberg1.1 Iceberg 是什么1.2 Iceberg 的 Table Format 介绍1.3 Iceberg 的核心思想1.4 Iceberg 的元数据管理1.5 Iceberg 的重要特性1.5.1 丰富的计算引擎1.5.2 灵活的文件组织形式1.5.3 优化数据入湖流程1.5.4 增量…

使用多线程std::thread发挥多核计算优势(解答)

使用多线程std::thread发挥多核计算优势&#xff08;题目&#xff09; 单核无能为力 如果我们的电脑只有一个核&#xff0c;那么我们没有什么更好的办法可以让我们的程序更快。 因为这个作业限制了你修改算法函数。你唯一能做的就是利用你电脑的多核。 使用多线程 由于我们…

国标视频云服务EasyGBS国标视频平台迁移服务器后无法启动的问题解决方法

国标视频云服务EasyGBS支持设备/平台通过国标GB28181协议注册接入&#xff0c;并能实现视频的实时监控直播、录像、检索与回看、语音对讲、云存储、告警、平台级联等功能。平台部署简单、可拓展性强&#xff0c;支持将接入的视频流进行全终端、全平台分发&#xff0c;分发的视频…

【力扣每日一题】2023.9.2 最多可以摧毁的敌人城堡数量

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 这道题难在阅读理解&#xff0c;题目看得我匪夷所思&#xff0c;错了好多个测试用例才明白题目说的是什么。 我简单翻译一下就是寻找1和…

【ES6】JavaScript的Proxy:理解并实现高级代理功能

在JavaScript中&#xff0c;Proxy是一种能够拦截对对象的读取、设置等操作的机制。它们提供了一种方式&#xff0c;可以在执行基本操作之前或之后&#xff0c;对这些操作进行自定义处理。这种功能在许多高级编程场景中非常有用&#xff0c;比如实现数据验证、日志记录、权限控制…

【算法系列篇】模拟算法

文章目录 前言1.替换所有问号1.1 题目要求1.2 做题思路1.3 Java代码实现 2. 提莫攻击2.1 题目要求2.2 做题思路2.3 Java代码实现 3. N 字形变换3.1 题目要求3.2 做题思路3.3 Java代码实现 4. 外观数列4.1 题目要求4.2 做题思路4.3 Java代码实现 5. 数青蛙5.1 题目要求5.2 做题思…