【Qt】实现一个小闹钟

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QPushButton>//按钮类
#include <QLineEdit>//行编辑器
#include <QLabel>//标签类
#include <QTextEdit>//输入框
#include <QTimerEvent>//定时器事件类
#include <QTimer>            //定时器类
#include <QTime>            //时间类
#include <QTimerEvent>       //定时器事件类
#include <QTextToSpeech>    //语音播报
#include <QMouseEvent>      //鼠标事件
#include <QMessageBox>      //提示框
#include <QObject>
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;
    void mouseMoveEvent(QMouseEvent *event) override;//鼠标移动事件
    void mousePressEvent(QMouseEvent *event) override;//鼠标点击事件


public slots:
    void click_startBtn();
    void click_cancelBtn();


private:
    Ui::Widget *ui;

    QPushButton *startBtn;  //启动按钮
    QPushButton *cancelBtn; //取消按钮
    QLabel  *lab1;          //显示系统时间
    QLineEdit *lin1;        //时间输入框
    QTextEdit *tex1;        //输入框
    QTextToSpeech  *tts;    //语音播报
    QTimer t1;              //定义一个定时器变量
    QPoint temp;            //中间向量

    int tid = 0;            //输入时间时候使用

};
#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QDebug>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    this->resize(500,400);//设置窗口大小
    this->setWindowFlag(Qt::FramelessWindowHint);//设置去除窗口标题


    //显示系统时间组件的一系列操作
    lab1 = new QLabel(this);
    lab1->resize(200,100);//设置大小
    lab1->setStyleSheet("background-color:pink;border-radius:10;font-size: 15pt;");
    lab1->move(20,20);//移动
    t1.start(1000);//启动一个定时器
    lab1->setAlignment(Qt::AlignCenter);//设置居中
    //显示系统时间的逻辑
    connect(&t1,&QTimer::timeout,[&](){
        lab1->setText(QDateTime::currentDateTime().toString("yyyy-MM-dd hh:mm:ss"));

    });


    //对可编辑时间lin1组件的操作
    lin1 = new QLineEdit(this);
    lin1->resize(250,30);//设置大小
    lin1->move(lab1->x()+lab1->width()+10,lab1->y());//移动
    lin1->setPlaceholderText("请输入时间");//设置占位符

    //对启动按钮组件的操作
    startBtn = new QPushButton(this);
    startBtn->setText("启动");//设置默认文本
    startBtn->resize(100,50);//设置大小
    startBtn->move(lin1->x(),lin1->y()+lin1->height()+20);
    startBtn->setStyleSheet("background-color:rgb(128, 128, 128);border-radius:10;");
    connect(startBtn,&QPushButton::clicked,this,&Widget::click_startBtn);

    //对取消按钮组件进行操作
    cancelBtn = new QPushButton(this);//开辟空间
    cancelBtn->setText("取消");
    cancelBtn->resize(100,50);
    cancelBtn->move(startBtn->x()+startBtn->width()+50,startBtn->y());
    cancelBtn->setStyleSheet("background-color:rgb(128, 128, 128);border-radius:10;");
    connect(cancelBtn,&QPushButton::clicked,this,&Widget::click_cancelBtn);

    //对语音框组件进行操作
    tex1 = new QTextEdit(this);
    tex1->resize(500,400);
    tex1->move(0,150);
    tex1->setPlaceholderText("请输入你要朗读的内容");

    tts = new QTextToSpeech();
}
//启动逻辑槽函数
void Widget::click_startBtn()
{
    //启动定时器
    tid = this->startTimer(1000);
    lin1->setReadOnly(true);//禁用
    tex1->setReadOnly(true);//禁用
    qDebug()<<"启动成功";
}
//取消逻辑槽函数
void Widget::click_cancelBtn()
{
    int res = QMessageBox::information(this,
                                        "取消",
                                        "确定要取消嘛?",
                                         QMessageBox::Yes|QMessageBox::No,
                                        QMessageBox::No);

    if(res == QMessageBox::Yes)
    {
        this->killTimer(tid);//关闭定时器
        lin1->setReadOnly(false);//解除禁用
        tex1->setReadOnly(false);//解除禁用
        qDebug()<<"取消成功";
    }

}

//定时器处理函数
void Widget::timerEvent(QTimerEvent *event)
{
    QString text = lab1->text();
    if(event->timerId() == tid)
    {
        //如果两者相等就语音语音播报
        if(lin1->text() == lab1->text())
        {
            tts->say(tex1->toPlainText());
            qDebug()<<"语音播报成功";
        }
    }

}
//鼠标移动事件
void Widget::mouseMoveEvent(QMouseEvent *event)
{
    this->move(event->globalPos()-temp);
}
//鼠标点击事件
void Widget::mousePressEvent(QMouseEvent *event)
{
    temp = event->globalPos()-this->pos();
    //点击鼠标左键关闭
    if(event->button() == Qt::RightButton)
    {
        this->close();
    }
}

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

效果展示:

相关推荐
m0_6312704023 分钟前
高级c语言(五)
c语言·开发语言
2401_8582861129 分钟前
53.【C语言】 字符函数和字符串函数(strcmp函数)
c语言·开发语言
程序猿练习生1 小时前
C++速通LeetCode中等第5题-无重复字符的最长字串
开发语言·c++·leetcode
2401_858120261 小时前
MATLAB中的无线通信系统部署和优化工具有哪些
开发语言·matlab
MATLAB滤波1 小时前
【PSINS】基于PSINS工具箱的EKF+UKF对比程序|三维定位|组合导航|MATLAB
开发语言·matlab
2401_858120531 小时前
MATLAB在嵌入式系统设计中的最佳实践
开发语言·matlab
蓝裕安1 小时前
伪工厂模式制造敌人
开发语言·unity·游戏引擎
无名之逆1 小时前
云原生(Cloud Native)
开发语言·c++·算法·云原生·面试·职场和发展·大学期末
阳光开朗_大男孩儿2 小时前
DBUS属性原理
linux·服务器·前端·数据库·qt
许野平2 小时前
Rust:Result 和 Error
开发语言·后端·rust·error·result