9.2QTday4作业

news2024/11/26 8:42:08

1 闹钟

头文件

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QtDebug>
#include <QLabel>     //标签类
#include <QLineEdit>  //行编辑器类
#include <QPushButton> //按钮类
#include <QTextEdit>   //文本编辑器类
#include <QtTextToSpeech>  //文本转语音

#include <QTimer>     //定时器
#include <QTime>      //时间类

#include <QTimerEvent>  //定时器时间类头文件

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

public slots:
    void start_slot();    //自定义的槽函数,与启动按钮连接

    void stop_slot();     //自定义的槽函数,与停止按钮连接

private:
    Ui::Widget *ui;

    //定义一个"当前时间"的指针
    QLabel *current_time_lab;

    //定义一个"闹钟时间"的指针
    QLineEdit *clock_time;

    //定义“启动”和“停止”的指针
    QPushButton *start_btn;
    QPushButton *stop_btn;

    //定义一个“闹钟铃声”的指针
    QTextEdit *clock_voice;

    //定义一个播报员的指针
    QTextToSpeech *speecher;

    //定义一个定时器的指针
    QTimer *timer;

    //定义一个定时器id
    int time_id;

};
#endif // WIDGET_H

源文件

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    //设置为纯净界面
    this->setWindowFlag(Qt::FramelessWindowHint);
    //设置闹钟界面固定大小
    this->setFixedSize(QSize(600,400));

    //给current_time_lab实例化空间
    current_time_lab = new QLabel(this);
    current_time_lab->setStyleSheet("background-color:skyblue");

    current_time_lab->resize(QSize(340,100));
    current_time_lab->move(30,40);

    //给colock_time实例化空间
    clock_time = new QLineEdit(this);
    clock_time->setAlignment(Qt::AlignCenter);   //文本对齐方式和字体
    clock_time->setFont(QFont("隶书", 10));
    clock_time->resize(QSize(160,50));
    clock_time->move(current_time_lab->x()+370,current_time_lab->y());

    //给start_btn 和 stop_btn实例化空间
    start_btn  = new QPushButton("启动",this);
    start_btn->resize(QSize(70,30));
    start_btn->move(clock_time->x(),clock_time->y()+70);

    stop_btn = new QPushButton("停止", this);
    stop_btn->resize(start_btn->size());
    stop_btn->move(start_btn->x()+90,start_btn->y());
    stop_btn->setEnabled(false);

    //给clock_voice实例化空间
    clock_voice = new QTextEdit("起床啦,起床啦,1234567asdfghjkl",this);
    clock_voice->setAlignment(Qt::AlignCenter);   //文本对齐方式和字体
    clock_voice->setFont(QFont("隶书", 20));
    clock_voice->resize(QSize(540,200));
    clock_voice->move(current_time_lab->x(),current_time_lab->y()+120);

    //给speecher实例化空间
    speecher = new QTextToSpeech(this);

    //实例化一个定时器timer  展示在当前时间界面
    timer = new QTimer(this);

    //启动定时器
    timer->start(1000);  //从此时起,每一秒定时器会发送timeout信号(连接槽函数处理)

    //将该定时的timeout信号连接到lambda表达式中中
    connect(timer, &QTimer::timeout, [&](){
            //调用QTime类的静态成员函数currentTime()获取系统时间
            QTime sys_time = QTime::currentTime();

            //将时间类对象调用成员函数toString()将sys_time转换成字符串
            QString time = sys_time.toString("hh:mm:ss");

            //将时间展示到current_time_lab界面上
            this->current_time_lab->setText(time);

            //将label上的内容居中展示,并设置字体
            this->current_time_lab->setAlignment(Qt::AlignCenter);
            this->current_time_lab->setFont(QFont("幼圆", 25, 15, false));

            //判断是否已到闹钟时间
            if(time == clock_time->text() && stop_btn->isEnabled())
            {

                //闹钟响起
                speecher->say(clock_voice->toPlainText());   //获取textedit编辑器文本需要使用toPlaiText();
            }
            //点击停止后,speecher调用stop停止闹钟声音
            else if(!stop_btn->isEnabled())
            {
                speecher->stop();
            }
    });

    //将启动按钮的信号与自定义的槽函数start_slot()连接
     connect(start_btn, &QPushButton::clicked, this, &Widget::start_slot);

    //将停止按钮的信号与槽函数stop_slot连接
    connect(stop_btn, &QPushButton::clicked, this, &Widget::stop_slot);
}

Widget::~Widget()
{
    delete ui;
}


//与启动按钮连接到槽函数的定义
void Widget::start_slot()
{

    //将闹钟时间编辑器、启动按钮、闹钟声音对应的文本编辑器设置为不可用
    clock_time->setEnabled(false);
    start_btn->setEnabled(false);
    clock_voice->setEnabled(false);

    stop_btn->setEnabled(true);
}

//与停止按钮连接到槽函数的定义
void Widget::stop_slot()
{
   //将闹钟时间编辑器、启动按钮、闹钟声音对应的文本编辑器设置为可用
    clock_time->setEnabled(true);
    start_btn->setEnabled(true);
    clock_voice->setEnabled(true);

    stop_btn->setEnabled(false);
}


2 思维导图

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STM32定时器定时及其应用

STM32定时器定时及其应用 定时器概述☆定时器相关配置CubeMX工程配置及程序实现固件库程序设计及实现 定时器概述 1. 工作原理 使用精准的时基&#xff0c;通过硬件的方式&#xff0c;实现定时功能。定时器核心就是计数器 2. 定时器分类   基本定时器&#xff08;TIM6~TIM7…

SiameseNet实战中文文本匹配任务

引言 本文我们通过SiameseNet模型来完成中文文本匹配任务&#xff0c;其中包含了文本匹配任务一般套路&#xff0c;后续只需要修改实现的模型。 数据准备 数据准备包括 构建词表(Vocabulary)构建数据集(Dataset) 本次用的是LCQMC通用领域问题匹配数据集&#xff0c;它已经…

RK3568-android11-适配ov13850摄像头

硬件连接 主要分为两部分: mipi接口:传输摄像头数据 i2c接口:配置摄像头和对焦马达芯片寄存器相关驱动 |-- arch/arm64/boot/dts/rockchip DTS配置文件 |-- drivers/phy/rockchip/|-- phy-rockchip-mipi-rx.c mipi dphy 驱动 |-- drivers/media||-- platform/rockchip/isp1…

20230903-闹钟

app.cpp #include "app.h" #include "ui_app.h" int k1 true;APP::APP(QWidget *parent):QWidget(parent),ui(new Ui::APP) {ui->setupUi(this);this->resize(380,300);this->setStyleSheet("background-color:cyan;");//设置样式spe…

关于指针的一些练习(1)

1. int main() {int a[3][2] { (0,1),(2,3),(4,5) };int* p;p a[0];printf("%d", p[0]);return 0; } 解析&#xff1a;a是一个3行2列的二维数组&#xff0c;对他进行初始化时大括号里面是逗号表达式&#xff0c;根据逗号表达式可以得到a数组中元素为1&#xff0c…

知识图谱推理研究综述9.3

综述分类 根据样本量大小的不同&#xff0c;将知识图谱推理方法分为多样本推理、少样本推理和零与单样本推理 KG定义&#xff1a;&#xff08;Y&#xff09; 知识图谱是以图的形式表示真实世界的实体与关系之间关系的知识库。 具体来说知识图谱是通过将应用数学、图形学、信…

培训机构如何利用小程序提升服务质量

近年来&#xff0c;小程序成为了许多企业和机构进行线上业务拓展的新方式。对于培训机构来说&#xff0c;构建一个具有吸引力的小程序可以帮助他们更好地与学员进行互动和沟通&#xff0c;并提供更便捷的学习服务。那么&#xff0c;如何使用第三方制作平台来构建一个具有吸引力…

线性代数的学习和整理18:什么是维度,什么是秩?关于秩的各种定理 (未完成)

目录 1 矩阵的秩 矩阵的秩 2 求秩的方法 矩阵的维度秩 矩阵的维度 向量的模&#xff0c;矩阵的模-没有把&#xff0c;难道是面积&#xff1f; 矩阵的平直概念 5 矩阵的初等变换&#xff08;矩阵等价概念的引出&#xff09; 0 问题引出&#xff1a;什么是秩&#xff1f;…

UG\NX CAM二次开发 查询工序所在的几何组TAG UF_OPER_ask_geom_group

文章作者:代工 来源网站:NX CAM二次开发专栏 简介: UG\NX CAM二次开发 查询工序所在的几何组TAG UF_OPER_ask_geom_group 效果: 代码: void MyClass::do_it() { int count=0;tag_t * objects;UF_UI_ONT_ask_selected_nodes(&count, &objects);for (in…

第二章 USB应用笔记之USB通讯基础

第二章 USB应用笔记之USB主设备和从设备 文章目录 第二章 USB应用笔记之USB主设备和从设备1.连接 > 2.主机枚举USB设备 > 3.有效数据传输&#xff0c;功能控制1.连接检测USB系统主要包括USB主机和USB设备两种设备。USB拓扑结构USB连接检测全速D上拉1.5K电阻&#xff08;高…

Kafka核心原理第二弹——更新中

架构原理 一、高吞吐机制&#xff1a;Batch打包、缓冲区、acks 1. Kafka Producer怎么把消息发送给Broker集群的&#xff1f; 需要指定把消息发送到哪个topic去 首先需要选择一个topic的分区&#xff0c;默认是轮询来负载均衡&#xff0c;但是如果指定了一个分区key&#x…

第五章 树与二叉树 六、树的存储结构

一、双亲表示法&#xff08;顺序存储&#xff09; 结点的指针指向父节点的位置 #define MAX_Tree_Size 100 //双亲表示法 typedef struct {int data;//数据域int parent;//双亲位置域 }PTNode;typedef struct { //树的定义PTNode nodes[MAX_Tree_Size]; //双亲表示int …

【Java实战项目】【超详细过程】—大饼的图片服务器2

代码操作数据库 pom.xml1.juit2.gson3.mysql依赖4.servlet DBUtil类Image类ImageDao类 本文主要讲述了用代码对数据库的操作&#xff0c;maven项目创建后进行如下操作&#xff1a; maven项目创建可以看这里&#xff1a;Servlet-day01 这里面有详细介绍 pom.xml pom.xml中放置了…

Vulnhub: Inferno: 1.1靶机

kali&#xff1a;192.168.111.111 靶机&#xff1a;192.168.111.233 信息收集 端口扫描 nmap -A -sC -v -sV -T5 -p- --scripthttp-enum 192.168.111.23380端口目录爆破 gobuster dir -u http://192.168.111.233 -w /usr/share/wordlists/dirbuster/directory-list-2.3-me…

使用Docker配置深度学习的运行环境

文章目录 推荐实验环境前言docker安装docker操作docker配置常见方法&#xff08;安装包、联网、程序管理器&#xff09;安装驱动的前提要求传统方法安装驱动程序程序管理器安装联网安装deb包安装 安装完成后的设置非传统方法安装-通过容器安装驱动的前提要求安装NVIDIA-Contain…

UG\NX CAM二次开发 获取工序类型 UF_OPER_ask_oper_type

文章作者:代工 来源网站:NX CAM二次开发专栏 简介: UG\NX CAM二次开发 获取工序类型 UF_OPER_ask_oper_type 效果: 代码: void MyClass::do_it() { int count=0;tag_t * objects;UF_UI_ONT_ask_selected_nodes(&count, &objects);for (int i=0; i<co…

Kotlin语言基础(一)Kotlin语言特性

Kotlin语言概述&#xff08;一&#xff09;- 语言特性 Kotlin是一种高级强类型语言&#xff0c;可以在Java VM上运行。 它具有如下特性&#xff1a; 1.代码简洁&#xff0c;代码量少&#xff0c;易学易懂。 例如&#xff1a; /*** 定义数据类Student* property id String 学…

14. Loadrunner 详细介绍以及使用

目录 1. Loadrunner 环境搭建 2. Loadrunner 介绍 3. Loadrunner 三大组件之间的关系 4. Loadrunner 脚本录制 4.1 WebTours 项目 4.1.1 如何启动项目 4.1.2 如何访问项目 4.1.3 相关配置 4.2 脚本录制 4.3 脚本加强 4.3.1 插入事务 4.3.2 插入集合点 4.3.3 插入检…

Marin说PCB之TDK和Murata电容哪家强?

不是各位朋友是否听说华为新款手机MATE60Pro已经开始发布销售了&#xff0c;小编我听到这个消息后很是震惊啊&#xff0c;这两年老美一直打压我们中国芯片行业的发展&#xff0c;而且拿华为开刀&#xff0c;搞了一些很恶心的手段来限制和打压华为的发展。所以当我听到新款的MAT…

JavaScript基础代码

以下是一些 JavaScript 基础代码示例&#xff1a; 变量定义 // 定义字符串变量 var name "John";// 定义数字变量 var age 30;// 定义布尔变量 var isMarried false;控制语句 // if 语句 if (age > 18) {console.log("成年人"); } else {console.…