【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;
}

效果展示:

相关推荐
用户805533698034 天前
不止三件套:QObject 属性系统全关键字与运行时反射!
c++·qt
xcyxiner4 天前
DicomViewer (vcpkg Windows和ubuntu编译)7
qt
Quz9 天前
QML Hello World 入门示例
qt
xcyxiner12 天前
DicomViewer (dcmtk读取dcm文件)5
qt
xcyxiner13 天前
DicomViewer (后台线程处理文件)4
qt
xcyxiner13 天前
DicomViewer (添加模型类)3
qt
xcyxiner14 天前
DicomViewer (目录调整) 2
qt
xcyxiner14 天前
dcmtk vtk vtk-dicom(gdcm) 编译(debug) v2
qt
LDR00616 天前
Type-C 快充全面升级!LDR6601 赋能个人护理便携电机,重塑剃须刀 / 理发器新体验
c语言·开发语言
雪碧聊技术16 天前
Tree.js是什么?一文讲透
开发语言·javascript·ecmascript