2022/9/3---C++day9

创作本文目的:记录自己的学习历程


一、QT实现简易播报闹钟

1.部分代码

头文件

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QTime>
#include <QMouseEvent>
#include <QTextToSpeech>
#include <QPainter>

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);

    //鼠标按压事件
    void mousePressEvent(QMouseEvent *e);

    //鼠标移动事件
    void mouseMoveEvent(QMouseEvent *e);

    //重写绘制事件
    void paintEvent(QPaintEvent *e);

private slots:
    void on_start_clicked();

    void on_stop_clicked();

private:
    Ui::Widget *ui;

    //定义闪烁秒的状态
    int showflag;

    //设置闹钟开关
    bool flag;

    //定义移动的点
    QPoint movepoint;

    //定义播报者
    QTextToSpeech speech;

};
#endif // WIDGET_H

功能代码

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

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

    //设置窗口样式
    setWindowFlags(Qt::FramelessWindowHint);

    //设置透明控件
    ui->textEdit->setStyleSheet("background-color:rgba(0,0,0,0)");
    ui->timeEdit->setStyleSheet("background-color:rgba(0,0,0,0)");
    ui->start->setFlat(true);
    ui->stop->setFlat(true);

    //设置按钮文本大小
    ui->start->setStyleSheet("font-size:30px;color:green");
    ui->stop->setStyleSheet("font-size:30px;color:red");

    //启动定时器
    startTimer(1000);
}

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

//重写定时器事件
void Widget::timerEvent(QTimerEvent *e)
{
    Q_UNUSED(e);
    //1.获取系统时间
    QTime systime = QTime::currentTime();

    //2.将系统时间转换为字符串
    QString timeText = systime.toString("hh:mm");

    if(showflag)
    {
        timeText[2] = ':';
        showflag = false;
    }
    else
    {
        timeText[2] = ' ';
        showflag = true;
    }

    //将时间字符串展示到标签中
    ui->label->setText(timeText);

    //设置字体大小
    QFont ft;
    ft.setPointSize(40);
    ui->label->setFont(ft);

    if(flag)
    {
        //闹钟功能
        //判断时间
        if(ui->label->text()==ui->timeEdit->text())
        {
            //播报文本框中内容
            speech.say(ui->textEdit->toPlainText());
        }
    }
}

//重写的鼠标按下事件
void Widget::mousePressEvent(QMouseEvent *e)
{
    if(e->button() == Qt::LeftButton)
    {
        movepoint = e->globalPos() - this->frameGeometry().topLeft();
    }

    if(e->button() == Qt::RightButton)
    {
        this->close();
    }
}

//重写的鼠标移动事件
void Widget::mouseMoveEvent(QMouseEvent *e)
{
    if(e->buttons() == Qt::LeftButton)
    {
        this->move(e->globalPos() - movepoint);
    }
}

void Widget::paintEvent(QPaintEvent *)
{
    QPainter painter(this);
    painter.drawPixmap(rect(),QPixmap(":/dog.jpg"),QRect());
}

void Widget::on_start_clicked()
{
    //将三个控件设为不可用状态
    ui->textEdit->setEnabled(false);
    ui->timeEdit->setEnabled(false);
    ui->start->setEnabled(false);

    //开启闹钟功能
    flag=true;
}

void Widget::on_stop_clicked()
{
    //将三个控件设为可用状态
    ui->textEdit->setEnabled(true);
    ui->timeEdit->setEnabled(true);
    ui->start->setEnabled(true);

    //关闭闹钟功能
    flag=false;
}

2.运行界面

在这里插入图片描述

3.程序网盘链接

百度网盘链接:https://pan.baidu.com/s/1yi0yhmFkwvG5pmOWtf_bJA
提取码:fuz9


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值