当前位置: 首页 > news >正文

0910作业+思维导图

一、作业(实现一个闹钟)

1、代码

1)头文件

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QPushButton>
#include <QLabel>
#include <QLineEdit>
#include <QTextEdit>
#include <QDebug>
#include <QIcon>
#include <QMovie>
#include <QTime>
#include <QTimer>
#include <QTimeEdit>
#include <QTextToSpeech>
#include <QPainter>
#include <QPixmap>
#include <QMouseEvent>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();public slots:void my_start();void my_over();void my_noise(QString text);void timeout_slot1(); //自定义超时函数void timeout_slot2(); //自定义超时函数void mouseMoveEvent(QMouseEvent *event) override;   //鼠标移动事件void mousePressEvent(QMouseEvent *event) override;  //鼠标按压事件void paintEvent(QPaintEvent *event); //修改背景private:Ui::Widget *ui;QPushButton *st_art;QPushButton *over;QLabel *local_time;QLineEdit *my_time;QTextEdit *noise;QTimer t1;QTimer t2;QTextToSpeech *speech;QPoint temp;     //辅助向量};
#endif // WIDGET_H

2).cpp文件

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//调整标签页大小this->resize(800,400);//关闭头部this->setWindowFlag(Qt::FramelessWindowHint);//设置鼠标移动//lab:显示系统时间this->local_time = new QLabel(this);local_time->resize(200,80);local_time->move(100,50);QFont font;font.setPointSize(26);local_time->setFont(font);//设置系统时间在标签页中不断跳转t1.start(1000);connect(&t1,&QTimer::timeout, this,&Widget::timeout_slot1);//Lineedit:编辑一个定时时间this->my_time = new QLineEdit(this);my_time->resize(250,40);my_time->move(400,50);my_time->setPlaceholderText("闹钟时间");//LTextEdit :编辑一个播报员内容this->noise = new QTextEdit(this);noise->resize(600,200);noise->move(100,180);noise->setPlaceholderText("播报内容");//创建一个语音播报类的播报员speech = new QTextToSpeech(this);speech->setLocale(QLocale::Chinese);//设置语言环境// 检查是否支持文本到语音功能if (speech->availableVoices().isEmpty()){qDebug() << "没有可用的语音引擎";return ;}speech->setVolume(1.0);// 设置音量speech->setRate(0.0);// 设置语速speech->setPitch(1.0);//设置音高//启动按钮、取消按钮this->st_art = new QPushButton("启动",this);st_art->resize(70,30);st_art->move(400,100);this->over = new QPushButton("取消",this);over->resize(70,30);over->move(480,100);//给取消按钮设置不可点over->setEnabled(false);connect(this->st_art,&QPushButton::clicked,this,&Widget::my_start);connect(&t2,&QTimer::timeout,this,&Widget::timeout_slot2);connect(this->over,&QPushButton::clicked,this,&Widget::my_over);}Widget::~Widget()
{delete ui;
}//启动按钮
void Widget::my_start()
{//把行编辑器,文本编辑器和启动按钮设置为不可操作this->my_time->setEnabled(false);this->noise->setEnabled(false);this->st_art->setEnabled(false);//把取消按钮设置为可操作this->over->setEnabled(true);//每隔一秒把label中的系统时间和设置好的行编辑器内容比较t2.start(1000);
}
//取消按钮
void Widget::my_over()
{//把行编辑器,文本编辑器和启动按钮重新设置为可操作this->my_time->setEnabled(true);this->noise->setEnabled(true);this->st_art->setEnabled(true);//清空行编辑器内容this->my_time->clear();//把取消按钮设置为不可操作this->over->setEnabled(false);//停止t2定时器t2.stop();
}
//定义播报
void Widget::my_noise(QString text)
{if(speech->state()==QTextToSpeech::Ready){speech->say(text);//开始读合成文本}
}
//定义系统时间
void Widget::timeout_slot1()
{QTime systime = QTime::currentTime();QString tm = systime.toString("hh:mm:ss");this->local_time->setText(tm);
}
//定义闹钟
void Widget::timeout_slot2()
{QString text1 = this->my_time->text();QString text2 = this->local_time->text();qDebug() <<text1;qDebug() <<text2;if(text1 == text2){//开始播报qDebug() <<this->noise->toPlainText();this->my_noise(this->noise->toPlainText());//停止比较t2.stop();//把行编辑器,文本编辑器和启动按钮重新设置为可操作this->my_time->setEnabled(true);this->noise->setEnabled(true);this->st_art->setEnabled(true);//清空行编辑器内容this->my_time->clear();//把取消按钮设置为不可操作this->over->setEnabled(false);}
}
//鼠标按压移动整体框架
void Widget::mouseMoveEvent(QMouseEvent *event)   //鼠标移动事件
{this->move(event->globalPos()-temp);
}
void Widget::mousePressEvent(QMouseEvent *event)  //鼠标按压事件
{temp = event->globalPos()-this->pos();
}
//设置背景
void Widget::paintEvent(QPaintEvent *event)
{QPainter painter(this);painter.drawPixmap(0,0,width(),height(),QPixmap("C:\\Users\\22856\\Desktop\\pictrue\\OIP-C.jpg"));
}

2、运行结果

二、思维导图

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • SMA2:代码实现详解——Image Encoder篇(Hiera章)
  • Proxyless Service Mesh:下一代微服务架构体系
  • 【HarmonyOS NEXT】实现网络图片保存到手机相册
  • 音视频直播应用场景探讨之RTMP推流还是GB28181接入?
  • javase复习day22泛型、set、数据结构
  • USBCANFD卡在新能源BMS上位机的应用
  • Android CustomDialog圆角背景不生效的问题
  • String字符串
  • uniapp(H5)设置反向代理,设置成功后页面报错
  • AI教你学Python 第4天:函数和模块
  • MySQL下载安装
  • 可信多视图分类(TCM ETCM)算法实现数字序列的分类---基因致病的诊断
  • JAVA学习-练习试用Java实现“子集 II”
  • 代码随想录训练营 Day58打卡 图论part08 拓扑排序 dijkstra朴素版 + 堆优化版
  • 机器学习和深度学习的常见概念总结(多原创图)
  • $translatePartialLoader加载失败及解决方式
  • CSS3 聊天气泡框以及 inherit、currentColor 关键字
  •  D - 粉碎叛乱F - 其他起义
  • LeetCode刷题——29. Divide Two Integers(Part 1靠自己)
  • mysql外键的使用
  • Netty 4.1 源代码学习:线程模型
  • PHP变量
  • 利用DataURL技术在网页上显示图片
  • 写给高年级小学生看的《Bash 指南》
  • 06-01 点餐小程序前台界面搭建
  • 国内开源镜像站点
  • ‌JavaScript 数据类型转换
  • #565. 查找之大编号
  • #pragma once
  • %3cli%3e连接html页面,html+canvas实现屏幕截取
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (第30天)二叉树阶段总结
  • (二)正点原子I.MX6ULL u-boot移植
  • (二十四)Flask之flask-session组件
  • (分布式缓存)Redis哨兵
  • (附源码)spring boot校园健康监测管理系统 毕业设计 151047
  • (附源码)springboot教学评价 毕业设计 641310
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • (转载)深入super,看Python如何解决钻石继承难题
  • (自用)learnOpenGL学习总结-高级OpenGL-抗锯齿
  • .NET Core 中的路径问题
  • .NET Core工程编译事件$(TargetDir)变量为空引发的思考
  • .NET Standard 支持的 .NET Framework 和 .NET Core
  • .net 程序发生了一个不可捕获的异常
  • .NET开发者必备的11款免费工具
  • ;号自动换行
  • @拔赤:Web前端开发十日谈
  • [1204 寻找子串位置] 解题报告
  • [240812] X-CMD 发布 v0.4.5:更新 gtb、cd、chat、hashdir 模块功能
  • [AMQP Connection 127.0.0.1:5672] An unexpected connection driver error occured
  • [Angular] 笔记 20:NgContent
  • [Bug]使用gradio创建应用提示AttributeError: module ‘gradio‘ has no attribute ‘inputs‘