QT 一个简易闹钟

news2024/11/25 4:50:14

1 效果图

pro

QT       += core gui texttospeech

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

CONFIG += 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.0

SOURCES += \
    main.cpp \
    widget.cpp

HEADERS += \
    widget.h

FORMS += \
    widget.ui

# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target

RESOURCES += \
    icon.qrc

.main

#include "widget.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}

.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QIcon>   //
#include <QLabel>  //标签类
#include <QColor>  //颜色类
#include <QTimer>  //定时器类
#include <QTime>   //时间类
#include <QDateTime> //时间事件类
#include <QLineEdit> //行标签
#include <QPushButton>//按钮类
#include <QSize>
#include <QTextEdit>
#include <QMouseEvent> //鼠标事件
#include <QTextToSpeech>
#include <QString>
#include <QPalette>
#include <QImage>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

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

    //重写定时器事件处理函数
    void timerEvent(QTimerEvent *event)override;

private slots:
    void alarm_start();  //自定义处理 闹钟启动 信号函数的声明
    void alarm_stop();   //自定义处理 停止闹钟 信号函数声明

private:
    Ui::Widget *ui;

    //将组件设置为私有成员
    QLabel *localtimelab;
    QLineEdit *alarm_edit;
    QPushButton *startbtn;
    QPushButton *stopbtn;
    QTextEdit *speakEdit;

    //获取闹铃时间
    QString alarm_time;
    int timer_id;    //定义一个定时器的id(基于事件处理函数)
    QTextToSpeech *speaker;//设置播报员
};
#endif // WIDGET_H

.cpp

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

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    //1、总体框架搭建
    this->setFixedSize(690,445);
    //2、设置窗口标题、Icon
    this->setWindowTitle("小桐闹铃");
    this->setWindowIcon(QIcon(":/icon/Alarm.jpg"));

    //3、组件设置
    //展示实时时间
    localtimelab = new QLabel(this);
    localtimelab->resize(400,100);
    localtimelab->move(30,30);
    localtimelab->setStyleSheet("QLabel{border:2px solid rgb(200,200,200);font-size:20px;}");
    localtimelab->setAlignment(Qt::AlignCenter);  //标签文本对齐

    //创建闹铃时间
    alarm_edit = new QLineEdit(this);
    alarm_edit->setPlaceholderText("请输入闹铃时间...");
    alarm_edit->resize(200,50);
    alarm_edit->move(localtimelab->width()+localtimelab->x()+30,localtimelab->y());
    alarm_edit->setStyleSheet("QLineEdit{border:2px solid rgb(200,200,200);}");
    alarm_edit->setAlignment(Qt::AlignCenter);

    //创建启动按钮
    startbtn = new QPushButton("启动",this);
    startbtn->resize(QSize(90,40));
    startbtn->move(alarm_edit->x(),alarm_edit->y()+60);
    connect(startbtn,&QPushButton::clicked,this,&Widget::alarm_start);    //将信号连接到槽函数

    //创建停止按钮
    stopbtn = new QPushButton("停止",this);
    stopbtn->resize(QSize(90,40));
    stopbtn->move(startbtn->x()+startbtn->width()+20,startbtn->y());
    stopbtn->setEnabled(false);
    connect(stopbtn,&QPushButton::clicked,this,&Widget::alarm_stop);    //将信号连接到槽函数

    //创建播报文本
    speakEdit = new QTextEdit(this);
    speakEdit->resize(630,250);
    speakEdit->move(localtimelab->x(),startbtn->y()+startbtn->height()+30);
    speakEdit->setPlaceholderText("请输入闹铃内容");
    speakEdit->setAlignment(Qt::AlignCenter);  //标签文本对齐

    //实例化一个播报员
    speaker = new QTextToSpeech(this);
    timer_id = this->startTimer(1000);
}

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

//启动闹铃的槽函数
void Widget::alarm_start()
{
    alarm_time = alarm_edit->text();  //将闹铃时间保存到alarm_time字符串中
    startbtn->setEnabled(false);
    alarm_edit->setEnabled(false);
    speakEdit->setEnabled(false);
    stopbtn->setEnabled(true);
}

//停止闹铃的槽函数
void Widget::alarm_stop()
{
    startbtn->setEnabled(true);
    alarm_edit->setEnabled(true);
    speakEdit->setEnabled(true);
    stopbtn->setEnabled(false);
}

//重写timerEvent函数
void Widget::timerEvent(QTimerEvent *event)
{
    if(event->timerId() == timer_id)
    {
        QDateTime local_time = QDateTime::currentDateTime();  //获取本地时间保存到local_time中
        localtimelab->setText(local_time.toString("yyyy-MM-dd hh:mm:ss"));
        if(alarm_time == local_time.toString("hh:mm:ss"))
        {
            speaker->say(speakEdit->toPlainText());
        }
    }
}



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

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

相关文章

PE文件格式详解

摘要 本文描述了Windows系统的PE文件格式。 PE文件格式简介 PE&#xff08;Portable Executable&#xff09;文件格式是一种Windows操作系统下的可执行文件格式。PE文件格式是由Microsoft基于COFF&#xff08;Common Object File Format&#xff09;格式所定义的&#xff0c…

16|女性视角:李清照笔下独到的细腻

好诗相伴&#xff0c;千金不换。你好&#xff0c;我是天博。 前面我们说了这一章的主题是“见众生”&#xff0c;见众生就是读诗词里的人性。截止到现在&#xff0c;我们已经感受了杜甫面对人民的悲悯&#xff0c;刘禹锡面对贬谪的耿直&#xff0c;而今天这一讲&#xff0c;我…

智能合约安全,著名的区块链漏洞:双花攻击

智能合约安全&#xff0c;著名的区块链漏洞&#xff1a;双花攻击 介绍: 区块链技术通过提供去中心化和透明的系统彻底改变了各个行业。但是&#xff0c;与任何技术一样&#xff0c;它也不能免受漏洞的影响。一个值得注意的漏洞是双花攻击。在本文中&#xff0c;我们将深入研究…

告别复杂的绘画软件!选择Growly Draw for Mac,让你的创作更轻松

Growly Draw for mac是一款快速绘画应用&#xff0c;让你可以在Mac电脑上轻松创作美丽的绘画作品。这个应用程序并不像Photoshop那样拥有丰富的功能&#xff0c;但它的简约设计使得那些基本的绘画任务变得轻松便捷。 如果你对绘画充满热情&#xff0c;但缺乏专业的绘画技巧&am…

Python调用Jumpserver的Api接口增删改查

引言 Jumpserver是一款强大的堡垒机系统&#xff0c;可以有效管理和控制企业内部服务器的访问权限&#xff0c;提高网络安全性。本文将介绍如何使用Python编程语言&#xff0c;结合Jumpserver提供的API接口&#xff0c;实现对跳板机的管理和操作。 1、什么是Jumpserver&#…

气传导耳机怎么样?市面上热门气传导耳机推荐

​气传导耳机不仅能够提升幸福感还能听到周围环境声&#xff0c;大大提高安全性。如果你在寻找一款高品质的气传导耳机&#xff0c;又不知从何入手时&#xff0c;不要担心&#xff0c;我已经为你精心挑选了四款市面上综合表现很不错的气传导耳机&#xff0c;让你享受更好的音质…

达梦类型转换问题-float转换为varchar

表结构 CREATE TABLE "SYSDBA"."TABLE_2" ( "COLUMN_1" FLOAT, "COLUMN_2" NUMERIC(22,6)) STORAGE(ON "MAIN", CLUSTERBTR) ; 表数据&#xff1a; 查询&#xff0c;将numeric转换为float&#xff0c;再转换为varchar&…

Spring Boot 整合 Redis,使用 RedisTemplate 客户端

文章目录 一、SpringBoot 整合 Redis1.1 整合 Redis 步骤1.1.1 添加依赖1.1.2 yml 配置文件1.1.3 Config 配置文件1.1.4 使用示例 1.2 RedisTemplate 概述1.2.1 RedisTemplate 简介1.2.2 RedisTemplate 功能 二、RedisTemplate API2.1 RedisTemplate 公共 API2.2 String 类型 A…

通讯行业:看完这篇文章,我的认知被刷新了!

在现代社会中&#xff0c;通讯系统已经成为我们生活中不可或缺的一部分&#xff0c;它们支撑着信息传递、数据交流和社交互动。然而&#xff0c;通讯系统的可靠性和连续性依赖于电源的稳定供应。电源中断或波动可能导致通讯中断&#xff0c;给个人、企业和组织带来巨大的不便和…

Java版企业电子招标采购系统源码Spring Cloud + Spring Boot +二次开发+ MybatisPlus + Redis

功能描述 1、门户管理&#xff1a;所有用户可在门户页面查看所有的公告信息及相关的通知信息。主要板块包含&#xff1a;招标公告、非招标公告、系统通知、政策法规。 2、立项管理&#xff1a;企业用户可对需要采购的项目进行立项申请&#xff0c;并提交审批&#xff0c;查看…

港陆证券:服装家纺公司上半年投资并购力度加大

9月1日&#xff0c;嘉曼服饰发布公告&#xff0c;为完善多品牌差异化开展战略&#xff0c;将以自有资金收买暇步士&#xff08;Hush Puppies&#xff09;品牌我国内地及香港、澳门区域IP财物。 面对服饰市场的激烈竞争&#xff0c;本年以来一些服饰类A股公司开启了“买买买”形…

西贝餐饮集团贺赞贤:Smartbi及指标体系的应用助力销供产业务协同

“传统的供应链数字化运营&#xff0c;是自下而上的需求驱动&#xff0c;存在效率低下、口径不统一、分析不敏捷等问题。西贝亟需自上而下构建完善科学的指标体系&#xff0c;实现敏捷、灵活、统一的应用。因此借助Smartbi以指标为核心的一站式ABI平台&#xff0c;梳理指标体系…

Spring事务(ACID特性、隔离级别、传播机制、失效场景)

一、事务的ACID特性 原子性&#xff08;Atomicity&#xff09; 原子性是指事务是一个不可分割的工作单位&#xff0c;事务中的操作要么都发生&#xff0c;要么都不发生。一致性&#xff08;Consistency&#xff09; 事务前后数据的完整性必须保持一致。隔离性&#xff08;Isola…

数据库概念

定义&#xff1a; 数据库&#xff08;Database 简称DB&#xff09;是持久存储有组织/可共享数据/的容器 数据库管理系统(MySQL、Oracle、DB2)是操作/和管理数据库/的软件 分类&#xff1a; 关系(型)数据库 (MySQL、Oracle、SQL Server、SQLite、DB2) 非关系(型)数据库 (Redis…

大模型 Dalle2 学习三部曲(二)Latent Diffusion Models学习

引言 Diffusion model大获成功&#xff0c;但是它的短板也很明显&#xff0c;需要大量的计算资源&#xff0c;并且推理速度比较慢。如何才能提升Diffusion model的计算效率。业界有各种各样的改进&#xff0c;无疑Latent Diffusion Models&#xff08;潜在扩散模型&#xff0c;…

基于Java+SpringBoot+Vue前后端分离善筹网(众筹)设计和实现

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

Bootstrap的行、列布局设计(网络系统设计)

目录 00-基础知识01-等宽列布局02-指定某一列的宽度03-根据内容自动改变列的宽度04-五种预定义列宽度 .col、.col-sm-*、.col-md-*、.col-lg-*、.col-xl-*05-不同视口宽度按不同的分列方案划分06-删除列内容的盒模型的外边距07-超过12列怎么办&#xff1f;08-重新排列各列的顺序…

【数据结构初阶】一. 复杂度讲解

相关代码gitee自取&#xff1a; C语言学习日记: 加油努力 (gitee.com) 接上期&#xff1a; 学C的第三十四天【程序环境和预处理】_高高的胖子的博客-CSDN博客 1 . 算法效率 &#xff08;1&#xff09;. 什么是数据结构&#xff1a; 数据结构(Data Structure)是计算机存储、…

MyBatis Plus 学习笔记

MyBatis Plus 国产的开源框架&#xff0c;基于 MyBatis 核心功能就是简化 MyBatis 的开发&#xff0c;提高效率。 MyBatis Plus 快速上手 Spring Boot(2.3.0) MyBatis Plus&#xff08;国产的开源框架&#xff0c;并没有接入到 Spring 官方孵化器中&#xff09; 1、创建 …

Grad-CAM 小陈读paper系列(摘要加引言)

Abstract 我们提出了一种基于卷积神经网络 (CNN) 的模型的决策生成“视觉解释”的技术&#xff0c;使它们更加透明。我们的方法——梯度加权类激活映射&#xff08;Grad-CAM&#xff09;&#xff0c; 使用任何目标概念的梯度&#xff08;例如“狗”甚至标题的 logits&#xf…