创作本文目的:记录自己的学习历程
一、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