QT设计一个小闹钟

news2024/9/29 13:16:02

        设置一个闹钟,左侧窗口显示当前时间,右侧设置时间,以及控制闹钟的开关,下方显示闹钟响时的提示语。当按启动按钮时,设置时间与闹钟提示语均不可再改变。当点击停止时,关闭闹钟并重新启用设置时间与闹钟提示语。

闹钟窗口展示:

工程管理文件:

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 += \
    picture.qrc

头文件:

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QDebug>
#include <QLabel>   //标签
#include <QTextEdit>    //文本编辑器
#include <QLineEdit>    //行编辑器
#include <QPushButton>  //按钮

#include <QTimerEvent>  //事件处理函数
#include <QDateTime>
#include <QtTextToSpeech>    //播报员
#include <QPaintEvent>
#include <QPainter>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public slots:
    //定义启动按钮的槽函数
    void on_btnStart_clicked();
    //定义停止按钮的槽函数
    void on_btnStop_clicked();

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

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

    void mouseMoveEvent(QMouseEvent *event) override;
    void mousePressEvent(QMouseEvent *event) override;

private:
    Ui::Widget *ui;

    QLabel *lab_time;
    QPushButton *btn_start;
    QPushButton *btn_stop;
    QLineEdit *line_setTime;
    QTextEdit *text_show;

    int time_id;    //基于事件处理函数
    QString oclock;   //设置闹钟
    QTextToSpeech *speak;   //设置播报员

    QPoint drap;
};
#endif // WIDGET_H

主函数:

#include "widget.h"

#include <QApplication>

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

主要功能函数:

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


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

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

    //纯净窗口
    this->setWindowFlag(Qt::FramelessWindowHint);
    //固定窗口尺寸
    this->setFixedSize(540,410);

    //显示当前时间
    lab_time = new QLabel(this);
    lab_time->setAlignment(Qt::AlignCenter);
    lab_time->setStyleSheet("border:2px solid rgb(0, 170, 255);font:16pt;border-radius:10px;color:white");
    lab_time->setGeometry(20,20,300,120);

    //设置text窗口
    text_show = new QTextEdit(this);
    text_show->setPlaceholderText("请输入闹钟提示语");
    text_show->setAlignment(Qt::AlignCenter);
    text_show->setStyleSheet("border:2px solid rgb(0, 170, 255);border-radius:5px;font:20pt;background-color:transparent;color:white");
    text_show->setGeometry(20,150,500,250);

    //显示设置的时间
    line_setTime = new QLineEdit(this);
    line_setTime->setPlaceholderText("请设置时间");
    line_setTime->setAlignment(Qt::AlignCenter);
    line_setTime->setStyleSheet("border:2px solid rgb(0, 170, 255);font:16pt;border-radius:10px;background-color:transparent;color:white");
    line_setTime->setGeometry(350,20,170,60);


    //启动按钮
    btn_start = new QPushButton(this);
    btn_start->setText("启动");
    btn_start->setStyleSheet("border:2px solid rgb(0, 170, 255);border-radius:10px;font:14pt;color:white");
    btn_start->setGeometry(350,90,80,50);

    //停止按钮
    btn_stop = new QPushButton(this);
    btn_stop->setText("停止");
    btn_stop->setStyleSheet("border:2px solid rgb(0, 170, 255);border-radius:10px;font:14pt;color:white");
    btn_stop->setGeometry(440,90,80,50);



    //启动按钮
    connect(btn_start, &QPushButton::clicked, this, &Widget::on_btnStart_clicked);
    connect(btn_stop, &QPushButton::clicked, this, &Widget::on_btnStop_clicked);

}

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

void Widget::on_btnStart_clicked()
{
    oclock = line_setTime->text();
    line_setTime->setEnabled(false);
    text_show->setEnabled(false);
    btn_start->setText("已启动");
}

void Widget::on_btnStop_clicked()
{
    line_setTime->setEnabled(true);
    text_show->setEnabled(true);
    speak->stop();
    btn_start->setText("启动");
}
void Widget::timerEvent(QTimerEvent *event)
{
    if(event->timerId() == time_id)
    {
        QDateTime time = QDateTime::currentDateTime();
        lab_time->setText(time.toString("yyyy-MM-dd hh:mm:ss"));
        if(oclock == time.toString("hh:mm:ss"))
        {
            speak->say(text_show->toPlainText());
        }
    }
}

void Widget::paintEvent(QPaintEvent * event)
{
    QPainter painter(this);
    painter.drawPixmap(rect(),QPixmap(":/picture/back.jpg"),QRect());
}



void Widget::mousePressEvent(QMouseEvent *event)
{
    drap = event->globalPos() - this->pos();

    //右键关闭窗口
    if(event->button() == Qt::RightButton)
    {
        this->close();
    }
}

void Widget::mouseMoveEvent(QMouseEvent *event)
{
    this->move(event->globalPos() - drap);
}

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

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

相关文章

2023高教社杯 国赛数学建模B题思路 - 多波束测线问题

1 赛题 B 题 多波束测线问题 单波束测深是利用声波在水中的传播特性来测量水体深度的技术。声波在均匀介质中作匀 速直线传播&#xff0c; 在不同界面上产生反射&#xff0c; 利用这一原理&#xff0c;从测量船换能器垂直向海底发射声波信 号&#xff0c;并记录从声波发射到信…

centos7更新podman

实验环境&#xff1a;centos7.7.1908 1.安装podman并查看版本 yum install podman podman -v 当前podman版本信息是1.6.4 2.更新podman版本 通过查看资料显示centos 7 支持最高版本为 3.4.4&#xff0c;更新podman大致有以下四步&#xff1a; golang 安装(本次使用版本: 1.…

Coremail管理员社区Q2季刊发布!

近日&#xff0c;Coremail管理员社区Q2季刊正式发布。2023年4月&#xff0c;Coremail管理员社区首次发刊&#xff0c;得到了广大客户朋友的支持和转发&#xff0c;这成为我们继续发布季刊的动力。 Coremail管理员社区Q2季刊主要盘点了2023年上半年社区的精选文章和热门活动等精…

【C++】C++面向对象编程三大特性之一——多态

❤️前言 继上篇继承的知识之后&#xff0c;本片博文主要和大家一起继续学习多态的知识。多态的实现依附于继承&#xff0c;是面向对象的重要特性。 正文 多态&#xff0c;顾名思义就是多种状态。简单来说&#xff0c;不同类型的对象进行相同的操作会产生不同的结果。举实例来…

独立站不被收录的原因有哪些?

答案是&#xff1a;独立站不被收录是因为你的文章质量太差&#xff0c;建议使用GPC爬虫池促收录。 在进行Google优化的过程中&#xff0c;许多独立站长发现自己的网站没有被谷歌等搜索引擎收录。 这种情况可能会让站长们感到困惑和沮丧。 以下是一些常见的原因&#xff0c;以…

2023 年高教社杯全国大学生数学建模竞赛题目 B 题 多波束测线问题

B 题 多波束测线问题 单波束测深是利用声波在水中的传播特性来测量水体深度的技术。声波在均匀介质中作匀速直线传播&#xff0c;在不同界面上产生反射&#xff0c;利用这一原理&#xff0c;从测量船换能器垂直向海底发射声波信号&#xff0c;并记录从声波发射到信号接收的传播…

【C++精华铺】10.STL string模拟实现

1. 序言 STL&#xff08;标准模板库&#xff09;是一个C标准库&#xff0c;其中包括一些通用的算法、容器和函数对象。STL的容器是C STL库的重要组成部分&#xff0c;它们提供了一种方便的方式来管理同类型的对象。其中&#xff0c;STLstring是一种常用的字符串类型。 STLstrin…

2023国赛数学建模A题思路分析 - 定日镜场的优化设计

# 1 赛题 A 题 定日镜场的优化设计 构建以新能源为主体的新型电力系统&#xff0c; 是我国实现“碳达峰”“碳中和”目标的一项重要 措施。塔式太阳能光热发电是一种低碳环保的新型清洁能源技术[1]。 定日镜是塔式太阳能光热发电站(以下简称塔式电站)收集太阳能的基本组件&…

人工智能客服:是跨境电商未来的趋势吗?

随着跨境电商的快速发展&#xff0c;客户服务成为了商家们越来越关注的焦点。而在客户服务领域中&#xff0c;人工智能客服正逐渐崭露头角。那么&#xff0c;人工智能客服是否是跨境电商未来的趋势呢&#xff1f;本文将探讨这个问题&#xff0c;并揭示人工智能客服的潜力和优势…

CSS文字居中对齐学习

CSS使用text-align属性设置文字对齐方式&#xff1b;text-align:center&#xff0c;这样就设置了文字居中对齐&#xff1b; <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>css 水平居中</title><style>.box …

2023高教社杯 国赛数学建模C题思路 - 蔬菜类商品的自动定价与补货决策

1 赛题 在生鲜商超中&#xff0c;一般蔬菜类商品的保鲜期都比较短&#xff0c;且品相随销售时间的增加而变差&#xff0c; 大部分品种如当日未售出&#xff0c;隔日就无法再售。因此&#xff0c; 商超通常会根据各商品的历史销售和需 求情况每天进行补货。 由于商超销售的蔬菜…

Stable Diffuse 之 安装文件夹、以及操作界面 UI 、Prompt相关说明

Stable Diffuse 之 安装文件夹、以及操作界面 UI 、Prompt相关说明 目录 Stable Diffuse 之 安装文件夹、以及操作界面 UI 、Prompt相关说明 一、简单介绍 二、安装文件相关说明 三、界面的简单说明 四、prompt 的一些语法简单说明 1、Prompt &#xff1a;正向提示词 &am…

SpringBoot如何优雅的输出异常信息?

目录 一、什么是 SpringBoot 二、什么是异常 三、SpringBoot如何配置异常输出 一、什么是 SpringBoot Spring Boot 是一个开源的 Java 框架&#xff0c;用于创建独立的、可部署的基于 Spring 的应用程序。它是 Spring 框架的一种扩展&#xff0c;旨在简化 Spring 应用程序的…

C高级 Day2

课后作业&#xff1a; #!/bin/bash #!/bin/bashmkdir ~/dir mkdir ~/dir/dir1 mkdir ~/dir/dir2 cp * ~/dir/dir1/ cp *.sh ~/dir/dir2/ tar -cJf ~/dir/dir2.tar.xz ~/dir/dir2 mv ~/dir/dir2.tar.xz ~/dir/dir1/ tar -xJf ~/dir/dir1/dir2.tar.xz -C ~/dir/dir1/ tree ~/dir思…

WebSocket的那些事(5-Spring中STOMP连接外部消息代理)

目录 一、序言二、开启RabbitMQ外部消息代理三、代码示例1、Maven依赖项2、相关实体3、自定义用户认证拦截器4、Websocket外部消息代理配置5、ChatController6、前端页面chat.html 四、测试示例1、群聊、私聊、后台定时推送测试2、登录RabbitMQ控制台查看队列信息 五、结语 一、…

虹科干货 | 如何选择合适水下应用的集成电缆传感器?

一、 前言 许多工业过程都要求将传感器浸没在水中&#xff0c;传感器浸入液体时&#xff0c;必须根据其浸入的环境条件进行适当设计&#xff0c;以满足特定要求 二、 浸没在不同液体中的选择 1. 水浸 在大多数涉及水浸没的情况下&#xff0c;无论是淡水还是盐水&#xff0c;只…

抓包工具fiddler的基础知识

目录 简介 1、作用 2、使用场景 3、http报文分析 3.1、请求报文 3.2、响应报文 4、介绍fiddler界面功能 4.1、AutoResponder(自动响应器) 4.2、Composer(设计请求) 4.3、断点 4.4、弱网测试 5、app抓包 简介 fiddler是位于客户端和服务端之间的http代理 1、作用 监控浏…

Jquery会议室布局含门入口和投影位置调整,并自动截图

一、关于下载 1、文章中罗列了主要代码&#xff0c;如需使用&#xff0c;请前往CSDN下载进行下载&#xff0c;包中包含所有文件素材&#xff0c;开箱即用 2、下载链接&#xff1a;https://download.csdn.net/download/zlxls/88305636 二、有这么一个需求 1、会场进行布局&a…

行业追踪,2023-09-07

自动复盘 2023-09-07 凡所有相&#xff0c;皆是虚妄。若见诸相非相&#xff0c;即见如来。 k 线图是最好的老师&#xff0c;每天持续发布板块的rps排名&#xff0c;追踪板块&#xff0c;板块来开仓&#xff0c;板块去清仓&#xff0c;丢弃自以为是的想法&#xff0c;板块去留让…

Android手机防沉迷软件的基本原理

(现在手机游戏、短视频等不仅对小孩子负面影响巨大&#xff0c;连很多成年人都沉迷其中难以自拔&#xff0c;影响工作、生活、学习。这已经造成全社会性的巨大影响&#xff0c;长此以往&#xff0c;国将不国。本人仅在此以自己掌握的些许技术略尽绵薄之力&#xff0c;希望能抛砖…