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

实现效果

知识点思维导图

相关推荐
liang89998 分钟前
java实现一个kmp算法
java·开发语言·算法
zym大哥大18 分钟前
C++11右值与列表初始化
数据结构·c++
lly20240643 分钟前
Ruby 数据类型
开发语言
sukalot1 小时前
windows C#-字符串和字符串字面量(四)
开发语言·c#
Reoyy2 小时前
Visual Studio 2022安装教程
c++·ide·visual studio
KBK20202 小时前
点击取消按钮,console出来数据更改了,页面视图没有更新
开发语言·javascript·vue.js
turui2 小时前
pytdx,取市场股票列表,get_security_list,start参数为8000时,数据获取失败,导致无法获取全量数据的BUG修正
开发语言·python·bug·量化·pytdx
心惠天意2 小时前
数据篇---用python创建想要的xml
xml·开发语言·python
司马相楠2 小时前
嵌入式开发 的软件开发技能
开发语言·后端·golang
fruge3 小时前
【Cesium】九、Cesium点击地图获取点击位置的坐标,并在地图上添加图标
开发语言·javascript·ecmascript