基于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); // 停止闹钟定时器
    }
}

实现效果

知识点思维导图

相关推荐
UIU1141 小时前
递归算法与汉诺塔
c++·学习·算法·c#·递归
Fruit_Caller1 小时前
static
开发语言·c++
Junfeng的技术笔记6 小时前
基于 C++/Qt 的雷达回波信号检测与测距仿真系统
qt
Quz6 小时前
QML TableView:自定义样式与排序表格
qt
Quz6 小时前
QML TableView:可编辑表格与 SQLite 数据持久化
qt·sqlite
Quz6 小时前
QML ListView:C++ 数据模型与 ProxyModel 实时过滤
qt
Quz6 小时前
QML ListView 入门:自定义样式与数据交互
qt
cpp_learner7 小时前
QT 隐藏式密码鉴权:一键开启管理员模式
qt
codigger7 小时前
ObjectSense:一门千行内核、把可靠性写进骨子里的面向对象脚本语言
开发语言·编程·编程语言
小小龙学IT7 小时前
Boost.Interprocess 开源 C++ 进程间通信库深度解析
c++·开源