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

QT第三讲

思维导图

 

蜡笔小新闹钟

需求:

实现

widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include<QTime>  //时间类
#include<QTimerEvent>  //事件处理类
#include<QtTextToSpeech> //文本转语音类
#include<QMessageBox>   //用户交互弹窗QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();void timerEvent(QTimerEvent *e);  //要重写的关于定时器事件处理函数声明部分private slots:void on_startBtn_clicked();void on_stopBtn_clicked();private:Ui::Widget *ui;int tId1;  //系统时间-->时钟idint tId2;  //闹钟时钟idQTextToSpeech *speaker;};
#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//启动系统时间显示tId1 = startTimer(1000);  //启动一个闹钟,每1000ms调用一次事件处理函数//实例化一个播报员speaker = new QTextToSpeech(this);connect(ui->startBtn,&QPushButton::clicked,this,&Widget::on_startBtn_clicked);  //手动连接clicked信号与startBtn槽函数//设置程序titlesetWindowTitle("Clock");   //Clock}Widget::~Widget()
{delete ui;
}//startBtn槽函数
void Widget::on_startBtn_clicked()
{if(ui->startBtn->text() == "启动"){tId2 = startTimer(1000);//将按钮上的文本内容改为 "关闭",并设置按钮为不可用状态ui->startBtn->setEnabled(false);}
}//stopBtn按钮对应槽函数
void Widget::on_stopBtn_clicked()
{//实例化消息对话框的对象,使用有参构造完成QMessageBox box(QMessageBox::Warning,  //对话框图标"警告",                 //对话框标题"是否确认退出闹钟?",          //对话框文本内容QMessageBox::Yes|QMessageBox::No, //对话框提供的按钮this);   //父组件int ret = box.exec();if(ret == QMessageBox::Yes){close();  //退出闹钟程序}else{ui->readText->clear(); //清除阅读框的文本内容ui->lineEdit->clear(); //清除预定的闹钟ui->startBtn->setText("开启");ui->startBtn->setEnabled(true);}
}//获取系统时间处理事件函数
void Widget::timerEvent(QTimerEvent *e)
{if(e->timerId() == tId1){QTime sys_time = QTime::currentTime(); //获取当前系统时间,QTime:对象QString t = sys_time.toString("hh:mm:ss"); //格式化时间对象ui->sysTime->setText(t);    //将时间写到ui界面中ui->sysTime->setAlignment(Qt::AlignLeft);  //将时间文本居左QTime book_time = QTime::currentTime();QString s = book_time.toString("hh:mm:ss"); //格式化预定时间QString temp = ui->readText->toPlainText();if(ui->lineEdit->text() == s){  //系统时间等于闹钟预定时间ui->startBtn->setEnabled(false); //阅读过程中启动按钮不可用//触发朗读文本内容事件speaker->say(temp);//将按钮上的文本内容改为 "关闭",并设置按钮为不可用状态ui->startBtn->setText("开启");ui->startBtn->setEnabled(true);}}
}

main.cpp

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

运行测试

http://www.lryc.cn/news/103723.html

相关文章:

  • Linux内核的I2C驱动框架详解------这应该是我目前600多篇博客中耗时最长的一篇博客
  • 【点云处理教程】05-Python 中的点云分割
  • 代码随想录算法训练营之JAVA|第十七天| 654. 最大二叉树
  • C++重写函数、隐藏函数、重载函数的区别对比
  • 15.python设计模式【函数工厂模式】
  • Redis主从复制、哨兵、cluster集群原理+实验
  • 微信小程序如何实现页面传参?
  • OPC DA 客户端与服务器的那点事
  • Java 错误异常介绍(Exceptions)
  • 每日一题——旋转数组的最小数字
  • SpringBoot Jackson 日期格式化统一配置
  • 剑指 Offer 38. 字符串的排列 / LeetCode 47. 全排列 II(回溯法)
  • 【前端知识】React 基础巩固(四十三)——Effect Hook
  • 一百三十八、ClickHouse——使用clickhouse-backup备份ClickHouse库表
  • 【无标题】使用Debate Dynamics在知识图谱上进行推理(2020)7.31
  • windows下若依vue项目部署
  • 【目标检测】基于yolov5的水下垃圾检测(附代码和数据集,7684张图片)
  • P1734 最大约数和
  • Excel将单元格中的json本文格式化
  • Baumer工业相机堡盟工业相机如何通过BGAPI SDK获取相机当前实时帧率(C#)
  • XGBoost的基础思想与实现
  • 【Docker】Docker的服务更新与发现
  • 【Docker 学习笔记】Docker架构及三要素
  • matlab编程实践14、15
  • C++ ——STL容器【list】模拟实现
  • ubuntu 16.04 安装mujoco mujoco_py gym stable_baselines版本问题
  • 自然语言处理(NLP)技术
  • 如何将ubuntu LTS升级为Pro
  • 如何学习ARM嵌入式开发?
  • 二、使用运行自己的docker python容器环境