基于Qt事件机制中的定时器事件的闹钟设计

目标

代码

pro文件

cpp 复制代码
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

头文件

cpp 复制代码
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QTimerEvent>
#include <QTime>
#include <QTimer>
#include <QTextToSpeech>
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 *e);

private slots:
    void on_pushButton_clicked();

    void on_startButton_clicked();

private:
    Ui::Widget *ui;
    int timeid=startTimer(1000);
    int alarmid;
    QTextToSpeech *speecher;
};
#endif // WIDGET_H

主函数

功能函数

cpp 复制代码
#include "widget.h"
#include "ui_widget.h"
#include <QDebug>

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
    , speecher(new QTextToSpeech) // 创建文本转语音对象
{
    ui->setupUi(this);
    this->setWindowFlag(Qt::FramelessWindowHint); // 设置窗口无边框
    ui->eventlabel->setAlignment(Qt::AlignCenter); // 设置事件标签居中对齐
    ui->alarmlabel->setAlignment(Qt::AlignCenter); // 设置闹钟标签居中对齐

}


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

// 重写时钟事件函数
void Widget::timerEvent(QTimerEvent *e)
{
    // 检查是否为时间更新定时器
    if(e->timerId()==timeid){
        QTime sys_time = QTime::currentTime(); // 获取当前系统时间
        QString t = sys_time.toString("hh:mm:ss"); // 格式化时间为字符串
        ui->timelabel->setText(t); // 更新时间标签的文本
        ui->timelabel->setAlignment(Qt::AlignCenter); 
    }
    // 检查是否为闹钟定时器
    if(e->timerId()==alarmid){
        QTime sys_time = QTime::currentTime(); // 获取当前系统时间
        QString t = sys_time.toString("hh:mm:ss"); // 格式化时间为字符串
        // 检查是否到达设定的闹钟时间
        if(ui->settmlabel->text()==t){
            // 循环播放闹钟提示语音
            for (int i=0;i<5;i++) {
                speecher->say(ui->alarmlabel->text()); // 使用文本转语音播放闹钟标签的文本
            }
        }
    }
}

// 关闭按钮的点击事件处理函数
void Widget::on_pushButton_clicked()
{
    this->close(); // 关闭窗口
}

// 启动/关闭按钮的点击事件处理函数
void Widget::on_startButton_clicked()
{
    // 检查按钮文本,判断当前是启动还是关闭状态
    if(ui->startButton->text()=="启动"){
        ui->startButton->setText("关闭"); // 设置按钮文本为"关闭"
        alarmid=startTimer(1000); // 启动闹钟定时器,每秒触发一次
    }else{
        ui->startButton->setText("启动"); // 设置按钮文本为"启动"
        killTimer(alarmid); // 停止闹钟定时器
    }
}

实现效果

知识点思维导图

相关推荐
AI+程序员在路上35 分钟前
Qt6中模态与非模态对话框区别
开发语言·c++·qt
nbsaas-boot5 小时前
Java 正则表达式白皮书:语法详解、工程实践与常用表达式库
开发语言·python·mysql
岁忧5 小时前
(LeetCode 面试经典 150 题 ) 11. 盛最多水的容器 (贪心+双指针)
java·c++·算法·leetcode·面试·go
chao_7896 小时前
二分查找篇——搜索旋转排序数组【LeetCode】两次二分查找
开发语言·数据结构·python·算法·leetcode
风无雨6 小时前
GO 启动 简单服务
开发语言·后端·golang
斯普信专业组6 小时前
Go语言包管理完全指南:从基础到最佳实践
开发语言·后端·golang
哈市雪花8 小时前
相机:以鼠标点为中心缩放(使用OpenGL+QT开发三维CAD)
qt·相机·opengl·cad·缩放·工业软件·渲染效果
我是苏苏8 小时前
C#基础:Winform桌面开发中窗体之间的数据传递
开发语言·c#
斐波娜娜8 小时前
Maven详解
java·开发语言·maven
小码氓8 小时前
Java填充Word模板
java·开发语言·spring·word