qt----------------------ling

该代码实现了一个基于Qt的Widget,包含启动和关闭按钮,用于定时器功能。定时器每秒触发一次,更新时间显示,并在达到预设时间时使用QTextToSpeech进行文本朗读。此外,Widget支持无边框拖动。
摘要由CSDN通过智能技术生成
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QTime>
#include <QTimer>
#include <QTimerEvent>
#include <QDateTime>
#include <QtTextToSpeech/QTextToSpeech>
#include <QFont>
#include <QFontDialog>
#include <QMouseEvent>

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 mousePressEvent(QMouseEvent *event) override;
   //重写鼠标移动事件
   void mouseMoveEvent(QMouseEvent *event) override;

    //自定义槽函数
private slots:
    //定时槽函数

   void on_StartBtn_clicked();

   void on_CloseBtn_clicked();

private:
    Ui::Widget *ui;

    //自定义一个整型变量,存放定时器id
    int t_id;

    //自定义一个播报员
    QTextToSpeech *s;

    //定义一个起始点
    QPoint StartPoint;
};
#endif // WIDGET_H

#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    //实例化播报员
    s = new QTextToSpeech(this);

    //设置纯净窗口
    setWindowFlag(Qt::FramelessWindowHint);
}

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

//启动按钮槽函数
void Widget::on_StartBtn_clicked()
{
    //1、 触发按钮
    if(ui->StartBtn->text() == "启动")
    {
        //启动执行逻辑
        t_id = this->startTimer(1000);

        //将按钮置为闹钟模式
        ui->StartBtn->setText("闹钟模式");
    }

}

//关闭按钮槽函数
void Widget::on_CloseBtn_clicked()
{
    if(ui->CloseBtn->text() == "关闭")
    {
        //执行关闭逻辑
        this->killTimer(t_id);

        //将按钮置为启动
        ui->StartBtn->setText("启动");
    }
}

//重写定时器处理函数事件
void Widget::timerEvent(QTimerEvent *event)
{
    if(event->timerId() == t_id)
    {
        //1、获取系统日期事件
        QDateTime sysDate = QDateTime::currentDateTime();

        //2、将日期转为字符串
        QString date = sysDate.toString("hh:mm:ss");

        //设置字体及大小
        QFont f;
        f.setPointSize(35);     //字体大小
        ui->TimeLab->setAlignment(Qt::AlignHCenter);        //水平居中
        ui->TimeLab->setFont(f);


        //3、将字符串展示到ui界面
        ui->TimeLab->setText(date);

        //判断是否到达预定的时间
        if(date == ui->TimeEdit->text())
        {
            //到达预定的时间直接说话
            s->say(ui->textEdit->toPlainText());
        }
    }
}

//鼠标按下事件处理函数
void Widget::mousePressEvent(QMouseEvent *event)
{
    StartPoint = event->globalPos() - this->frameGeometry().topLeft();
    //event->globalPos():获取鼠标相对于整个屏幕的坐标点
    //this->framGeometry():获取整个界面矩形框
    //this->frameGeometry().topLeft():界面矩形框左上角相当于整个屏幕的坐标
//    qDebug() << this->frameGeometry().topLeft();
}

//鼠标移动时间处理函数
void Widget::mouseMoveEvent(QMouseEvent *event)
{
    this->move(event->globalPos()-StartPoint);
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值