9.2作业

文章描述了一个使用Qt库开发的窗口类Widget,包含按钮、输入框、标签和文本编辑器等控件,实现计时器功能,定时显示时间和播报预设或用户输入的内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QPushButton>
#include <QLineEdit>
#include <QLabel>
#include <QTextEdit>
#include <QString>
#include <QDateTime>
#include <QTimer>
#include <QPainter>
#include <QMessageBox>
#include <QTextToSpeech>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

    void paintEvent(QPaintEvent *event)override;
    void timerEvent(QTimerEvent *event)override;
private:
    Ui::Widget *ui;
    QPushButton *btn1;
    QPushButton *btn2;
    QLineEdit *let;
    QLabel *bel;
    QTextEdit *tet;
    QTimer *time;
    QTextToSpeech *sp=new QTextToSpeech(this);
public slots:
    void btn_1();
    void btn_2();
    void jsq();
};
#endif // WIDGET_H
#include "widget.h"
#include "ui_widget.h"
#include <QFont>
#include <QDebug>
Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    this->setWindowFlag(Qt::FramelessWindowHint);
    this->setFixedSize(600,400);
    btn1=new QPushButton("启动",this);
    btn1->resize(90,40);
    btn1->move(365,90);
    btn2=new QPushButton("关闭",this);
    btn2->resize(90,40);
    btn2->move(475,90);
    let=new QLineEdit(this);
    let->resize(200,40);
    let->move(365,30);
    let->setPlaceholderText("设置时间: 00:00");
    bel=new QLabel(this);
    bel->resize(300,100);
    bel->move(35,30);
    tet=new QTextEdit(this);
    tet->move(35,160);
    tet->resize(530,210);
    tet->setPlaceholderText("输入定时播报内容:默认为嘀嘀嘀嘀嘀嘀嘀嘀嘀");
    QFont a;
    a.setPixelSize(30);
    bel->setFont(a);
    tet->setFont(a);
    a.setPixelSize(15);
    a.setWeight(75);
    let->setFont(a);
    btn1->setFont(a);
    btn2->setFont(a);

    time=new QTimer(this);
}

void Widget::paintEvent(QPaintEvent *event)
{
    this->startTimer(100);
    QPainter painter(this);
    QPen pen;
    pen.setColor("black");
    pen.setWidth(15);
    pen.setStyle(Qt::SolidLine);
    painter.setPen(pen);
    painter.drawRect(0,0,this->width(),this->height());
    painter.drawRect(btn1->x(),btn1->y(),btn1->width(),btn1->height());
    painter.drawRect(btn2->x(),btn2->y(),btn2->width(),btn2->height());
    painter.drawRect(let->x(),let->y(),let->width(),let->height());
    painter.drawRect(tet->x(),tet->y(),tet->width(),tet->height());
    pen.setWidth(8);
    painter.setPen(pen);
    painter.drawRect(bel->x(),bel->y(),bel->width(),bel->height());
    connect(btn1,&QPushButton::clicked,this,&Widget::btn_1,Qt::UniqueConnection);
    connect(btn2,&QPushButton::clicked,this,&Widget::btn_2,Qt::UniqueConnection);
    connect(time,&QTimer::timeout,this,&Widget::jsq,Qt::UniqueConnection);
}

void Widget::timerEvent(QTimerEvent *event)
{
    QDateTime sys_dt=QDateTime::currentDateTime();
    bel->setText(sys_dt.toString(" yyyy-MM-d  hh:mm:ss"));
}

void Widget::btn_1()
{
    QString str=let->text();
    qDebug()<<str[0]<<str[1];
    if('0'>str[0]||str[0]>'2'||'0'>str[1]||str[1]>'9'||str[2]!=':'||'0'>str[3]||str[3]>'5'||'0'>str[4]||str[4]>'9'||str[5]!='\x0')
    {
        QMessageBox::information(this,"提示","请按格式输入时间",QMessageBox::Ok);
        return;
    }
    btn1->setEnabled(false);
    let->setEnabled(false);
    btn2->setEnabled(true);
    time->start(100);
}

void Widget::btn_2()
{
    btn2->setEnabled(false);
    let->setEnabled(true);
    btn1->setEnabled(true);
    time->stop();
}

void Widget::jsq()
{
    QString str=let->text();
    QDateTime sys_dt=QDateTime::currentDateTime();
    if(sys_dt.toString("hh:mm")==str)
    {
        sp->say(tet->toPlainText());
        if(tet->toPlainText()=="")
        {
            sp->say("嘀嘀嘀嘀嘀嘀嘀嘀嘀");
        }
        time->stop();
        btn1->setEnabled(true);
        let->setEnabled(true);
    }
}
Widget::~Widget()
{
    delete ui;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值