首先是需求:
1:设定时间,当时间到后,系统会读出您所写的备注内容,并会弹出时间到的提示
2:开始计时后,会锁定备注框与时间输入框
效果图:
(爱门!)
首先画ui设计,”开始定时“按钮后,还有一排label框,因为是透明的,所以看不见
实现时间显示
void Oclock::on_LCD_1_overflow()
{
//1获取系统时间
QDateTime currentTime = QDateTime::currentDateTime();
QString timeText = currentTime.toString("hh:mm:ss");
//把时间放到LCD中
ui->LCD_1->setDigitCount(8);//设置为显示8位
ui->LCD_1->display(timeText);
if(flag1==1)
emit singal_1(); //当检测到按钮按下,发送对应信号
if(flag2==1)
emit singal_2();
if(flag3==1)
emit singal_3();
if(flag4==1)
emit singal_3();
}
void Oclock::on_nyr_linkActivated()
{
//1获取系统时间
QDateTime currentTime = QDateTime::currentDateTime();
QString timeText = currentTime.toString("yyyy年MM月dd日 dddd");
//把时间放入文本框
ui->nyr->setText(timeText);
}
还要在构造函数里写启动信号
//给定时器事件指针实例化对象
t1 = new QTimer(this);
t1->start(500);
//连接timeout信号对应的槽函数//主时钟
connect(t1, &QTimer::timeout, this, &Oclock::on_LCD_1_overflow);
connect(t1, &QTimer::timeout, this, &Oclock::on_nyr_linkActivated);
接下来是闹钟部分。
原理:按下按钮1后,锁定闹钟框和备注框,获取时间的函数开始持续发送信号1。在设定时间的框内,获取系统实时时间,并把自身上写的时间转换为相同格式,相比较。如果相同,则用speech函数读出备注栏内写的内容。同时,让 ”时间到“ 弹出。
构造函数内:
connect(this, &Oclock::singal_1, this, &Oclock::on_time_1_cursorPositionChanged);
//闹钟1
void Oclock::on_time_1_cursorPositionChanged()
{
//1获取系统时间
QDateTime currentTime = QDateTime::currentDateTime();
QString timeText = currentTime.toString("hh:mm:ss");
QString TC_1 = ui->time_1->text();
if(timeText == TC_1)
{
speech.say(ui->lineEdit1_->text());
ui->TS_1->setText("时间到!");
}
}
//按钮1
void Oclock::on_DS_1_clicked()
{
if(ui->DS_1->text() == "开始定时")
{
flag1 = 1;
ui->DS_1->setText("关闭闹钟");
ui->time_1->setEnabled(false); //设置完闹钟后,若不关闭,则无法调整时间
ui->lineEdit1_->setEnabled(false);
}else if(ui->DS_1->text() == "关闭闹钟")
{
flag1 = 0;
ui->DS_1->setText("开始定时");
ui->TS_1->clear(); //清除后面的提示
ui->time_1->setEnabled(true); //解除锁定
ui->lineEdit1_->setEnabled(true);
}
}
代码总览
oclock.h文件
#include <QTimer>
#include <QDateTime>
#include <QObject>
#include <QTime>
#include <QLCDNumber>
QT_BEGIN_NAMESPACE
namespace Ui { class Oclock; }
QT_END_NAMESPACE
class Oclock : public QWidget
{
Q_OBJECT
signals:
void singal_1(); //自定义信号
void singal_2();
void singal_3();
void singal_4();
public:
Oclock(QWidget *parent = nullptr);
~Oclock();
private slots:
void on_LCD_1_overflow();
void on_nyr_linkActivated();
void on_time_1_cursorPositionChanged();
void on_DS_1_clicked();
void on_TS_1_linkActivated();
void on_time_2_cursorPositionChanged();
void on_DS_2_clicked();
void on_TS_2_linkActivated();
void on_time_3_cursorPositionChanged();
void on_DS_3_clicked();
void on_time_4_cursorPositionChanged();
void on_DS_4_clicked();
private:
Ui::Oclock *ui;
QTimer *t1; //定义时间定时器的指针
int flag1=0;
int flag2=0;
int flag3=0;
int flag4=0;
//定义一个播报者
QTextToSpeech speech;
};
#endif // OCLOCK_H
oclock.cpp
#include "oclock.h"
#include "ui_oclock.h"
Oclock::Oclock(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Oclock)
{
ui->setupUi(this);
//给定时器事件指针实例化对象
t1 = new QTimer(this);
t1->start(500);
//连接timeout信号对应的槽函数//主时钟
connect(t1, &QTimer::timeout, this, &Oclock::on_LCD_1_overflow);
connect(t1, &QTimer::timeout, this, &Oclock::on_nyr_linkActivated);
//闹钟部分
connect(this, &Oclock::singal_1, this, &Oclock::on_time_1_cursorPositionChanged);
connect(this, &Oclock::singal_2, this, &Oclock::on_time_2_cursorPositionChanged);
connect(this, &Oclock::singal_3, this, &Oclock::on_time_3_cursorPositionChanged);
connect(this, &Oclock::singal_4, this, &Oclock::on_time_4_cursorPositionChanged);
//锁死窗口大小
this->setFixedSize(1200,741); //16:9
//设置标题
this->setWindowTitle("一般路过小闹钟");
//设置背景
setAutoFillBackground(true); //允许设置
QPixmap pixmap = QPixmap(":/QQ_1.jpg").scaled(this->size());
QPalette palette(this->palette());
palette.setBrush(QPalette::Background, QBrush(pixmap));
this->setPalette(palette);
}
Oclock::~Oclock()
{
delete ui;
}
void Oclock::on_LCD_1_overflow()
{
//1获取系统时间
QDateTime currentTime = QDateTime::currentDateTime();
QString timeText = currentTime.toString("hh:mm:ss");
//把时间放到LCD中
ui->LCD_1->setDigitCount(8);//设置为显示8位
ui->LCD_1->display(timeText);
if(flag1==1)
emit singal_1(); //时刻发送信号
if(flag2==1)
emit singal_2();
if(flag3==1)
emit singal_3();
if(flag4==1)
emit singal_3();
}
void Oclock::on_nyr_linkActivated()
{
//1获取系统时间
QDateTime currentTime = QDateTime::currentDateTime();
QString timeText = currentTime.toString("yyyy年MM月dd日 dddd");
//把时间放入文本框
ui->nyr->setText(timeText);
}
//闹钟1
void Oclock::on_time_1_cursorPositionChanged()
{
//1获取系统时间
QDateTime currentTime = QDateTime::currentDateTime();
QString timeText = currentTime.toString("hh:mm:ss");
QString TC_1 = ui->time_1->text();
if(timeText == TC_1)
{
speech.say(ui->lineEdit1_->text());
ui->TS_1->setText("时间到!");
}
}
//按钮1
void Oclock::on_DS_1_clicked()
{
if(ui->DS_1->text() == "开始定时")
{
flag1 = 1;
ui->DS_1->setText("关闭闹钟");
ui->time_1->setEnabled(false); //设置完闹钟后,若不关闭,则无法调整时间
ui->lineEdit1_->setEnabled(false);
}else if(ui->DS_1->text() == "关闭闹钟")
{
flag1 = 0;
ui->DS_1->setText("开始定时");
ui->TS_1->clear(); //清除后面的提示
ui->time_1->setEnabled(true); //解除锁定
ui->lineEdit1_->setEnabled(true);
}
}
//提示槽,没用,不小心搞出来的,删又不敢删
void Oclock::on_TS_1_linkActivated()
{
}
//闹钟2
void Oclock::on_time_2_cursorPositionChanged()
{
//1获取系统时间
QDateTime currentTime = QDateTime::currentDateTime();
QString timeText = currentTime.toString("hh:mm:ss");
QString TC_2 = ui->time_2->text();
if(timeText == TC_2)
{
speech.say(ui->lineEdit_2->text());
ui->TS_2->setText("时间到!");
}
}
//按钮2
void Oclock::on_DS_2_clicked()
{
if(ui->DS_2->text() == "开始定时")
{
flag2 = 1;
ui->DS_2->setText("关闭闹钟");
ui->time_2->setEnabled(false); //设置完闹钟后,若不关闭,则无法调整时间
ui->lineEdit_2->setEnabled(false);
}else if(ui->DS_2->text() == "关闭闹钟")
{
flag2 = 0;
ui->DS_2->setText("开始定时");
ui->TS_2->clear(); //清楚后面的提示
ui->time_2->setEnabled(true); //解除锁定
ui->lineEdit_2->setEnabled(true);
}
}
//提示槽,没用,不小心搞出来的
void Oclock::on_TS_2_linkActivated()
{
}
// 闹钟3
void Oclock::on_time_3_cursorPositionChanged()
{
//1获取系统时间
QDateTime currentTime = QDateTime::currentDateTime();
QString timeText = currentTime.toString("hh:mm:ss");
QString TC_3 = ui->time_3->text();
if(timeText == TC_3)
{
speech.say(ui->lineEdit_3->text());
ui->TS_3->setText("时间到!");
}
}
// 按钮3
void Oclock::on_DS_3_clicked()
{
if(ui->DS_3->text() == "开始定时")
{
flag3 = 1;
ui->DS_3->setText("关闭闹钟");
ui->time_3->setEnabled(false); //设置完闹钟后,若不关闭,则无法调整时间
ui->lineEdit_3->setEnabled(false);
}else if(ui->DS_3->text() == "关闭闹钟")
{
flag3 = 0;
ui->DS_3->setText("开始定时");
ui->TS_3->clear(); //清楚后面的提示
ui->time_3->setEnabled(true); //解除锁定
ui->lineEdit_3->setEnabled(true);
}
}
//闹钟4
void Oclock::on_time_4_cursorPositionChanged()
{
//1获取系统时间
QDateTime currentTime = QDateTime::currentDateTime();
QString timeText = currentTime.toString("hh:mm:ss");
QString TC_4 = ui->time_3->text();
if(timeText == TC_4)
{
speech.say(ui->lineEdit_4->text());
ui->TS_4->setText("时间到!");
}
}
void Oclock::on_DS_4_clicked()
{
if(ui->DS_4->text() == "开始定时")
{
flag4 = 1;
ui->DS_4->setText("关闭闹钟");
ui->time_4->setEnabled(false); //设置完闹钟后,若不关闭,则无法调整时间
ui->lineEdit_4->setEnabled(false);
}else if(ui->DS_4->text() == "关闭闹钟")
{
flag4 = 0;
ui->DS_4->setText("开始定时");
ui->TS_4->clear(); //清楚后面的提示
ui->time_4->setEnabled(true); //解除锁定
ui->lineEdit_4->setEnabled(true);
}
}
使用效果: