QTday3

使用QT cretator完成下面功能

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QPushButton>
#include <QTextToSpeech>
#include <QLineEdit>
#include <QTextEdit>
#include <QLabel>
#include <QTimer>
#include <QTime>
#include <QTimerEvent>
#include <QDateTime>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

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


    void mouseMoveEvent(QMouseEvent *event) override;
    void mousePressEvent(QMouseEvent *event) override;

signals:
    void min_signal();
    void close_signal();
    void clock_signal();
    void cancel_signal();
//    void addtime_signal();

public slots:
    void close_slot();
//    void min_slot();
    void action_slot();
    void cancel_slot();
    void clock_slot();
//    void addtime_slot();

private:
    Ui::Widget *ui;
    QLabel *TimeLabel;
    QTextEdit *HintEdit;
    QLineEdit *TimeEdit;
    QPushButton *ActionBtn;
    QPushButton *CancelBtn;
    QPushButton *MinBtn;
    QPushButton *CloseBtn;

    QPoint temp;    //辅助向量坐标点

    //有关事件处理函数版本
    int SysTimeTid = 0;        //系统定时器id号
    int UsrTimeTid = 1;        //用户定时器
    QString UsrTime;
    QString SysTime;
    void timerEvent(QTimerEvent *event) override ;
    QTextToSpeech *Voicer = new QTextToSpeech(this);
};
#endif // WIDGET_H
#include "widget.h"
#include "ui_widget.h"
#include <QVBoxLayout>
#include <QWidget>
#include <QLabel>
#include <QMainWindow>
#include <QPushButton>
#include <QMovie>
#include <QDebug>
#include <QMessageBox>
#include <QMouseEvent>

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

    //创建自定义控件
    this->TimeLabel = new QLabel("时间",this);
    this->TimeEdit = new QLineEdit(this);
    this->ActionBtn = new QPushButton("启动",this);
    this->CancelBtn = new QPushButton("取消",this);
    this->MinBtn = new QPushButton("",this);
    this->CloseBtn = new QPushButton("",this);
    this->HintEdit = new QTextEdit("三更灯火五更鸡,正是男儿读书时,"
                                   "黑发不知勤学早,白首方悔读书迟",this);

    //触发刷新时间事件
    SysTimeTid = this->startTimer(1000);
    //界面布局
    this->resize(600,400);
    setWindowFlags(windowFlags() | Qt::FramelessWindowHint);    //关闭上方标题栏
    this->setWindowIcon(QIcon(":/pictrue/clock.png"));    //窗口图标

    CloseBtn->setIcon(QIcon(":/pictrue/close.png"));
    CloseBtn->resize(30,30);
    CloseBtn->setFlat(true);        //设置按钮扁平风格
    CloseBtn->setStyleSheet("background-color: rgba(255, 0, 0, 0.9);");
    //CloseBtn->move(570,0);
    CloseBtn->setGeometry(QRect(this->width() -  CloseBtn->width(), 0,  CloseBtn->width(), CloseBtn->height()));

    MinBtn->setIcon(QIcon(":/pictrue/min.png"));
    MinBtn->resize(30,30);
    MinBtn->setFlat(true);        //设置按钮扁平风格
    MinBtn->setStyleSheet("background-color: rgba(255, 0, 0, 0.9);");
    MinBtn->setGeometry(QRect(this->width() - MinBtn->width()- CloseBtn->width(), 0, MinBtn->width(), MinBtn->height()));

    TimeLabel->move(20,30);
    TimeLabel->resize(290,50);
    this->TimeLabel->setAlignment(Qt::AlignCenter);
    TimeEdit->resize(250,40);
    ActionBtn->resize(125,50);
    CancelBtn->resize(125,50);
    HintEdit->resize(550,250);
    TimeEdit->move(TimeLabel->x()+TimeLabel->width()+10,TimeLabel->y());
    ActionBtn->move(TimeEdit->x(),TimeEdit->y()+TimeEdit->height()+5);
    CancelBtn->move(ActionBtn->x()+ActionBtn->width(),ActionBtn->y());
    HintEdit->move(TimeLabel->x(),TimeEdit->y()+TimeEdit->height()+50);



    /*******************************将按钮绑定对应信号*****************************************/
    connect(this->CloseBtn,&QPushButton::clicked,this,&Widget::close_slot);
    connect(this->MinBtn,&QPushButton::clicked,[&](){
        this->showMinimized();    });
    connect(this->ActionBtn,&QPushButton::clicked,this,&Widget::action_slot);
    connect(this->CancelBtn,&QPushButton::clicked,this,&Widget::cancel_signal);

    connect(this,&Widget::clock_signal,this,&Widget::clock_slot);
    connect(this,&Widget::cancel_signal,this,&Widget::cancel_slot);

//    connect(this,&Widget::addtime_signal,this,&Widget::addtime_slot);
}

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

/********************************自定义槽函数******************************/
void Widget::close_slot()
{
    QMessageBox box(QMessageBox::Question,
                    "闹钟","确认退出闹钟 ?",
                    QMessageBox::Yes|QMessageBox::Cancel,
                    this);
    box.setButtonText(QMessageBox::Yes,"确认");
    box.setButtonText(QMessageBox::Cancel,"取消");

    //显示对话框
    int res = box.exec();
    if(res == QMessageBox::Yes)
    {
       this->close();
    }else if(QMessageBox::Cancel)
    {
       box.close();
    }

}

void Widget::action_slot()
{
    //关闭文本编辑器
    this->TimeEdit->setEnabled(false);
    this->HintEdit->setEnabled(false);
    //获取用户设置时间
    UsrTime = TimeEdit->text();
    //开启用户定时器
    //UsrTimeTid = this->startTimer(500);
    qDebug()<<"开启闹钟"<<UsrTime;
}

void Widget::cancel_slot()
{
    Voicer->stop();
    //打开文本编辑器
    this->TimeEdit->setEnabled(true);
    this->HintEdit->setEnabled(true);
}

void Widget::timerEvent(QTimerEvent *event)
{
    //判断是否为自己的定时器
    if(event->timerId() == SysTimeTid)
    {
        //在ui界面显示日期时间
        SysTime = QDateTime::currentDateTime().toString("hh:mm:ss");
        this->TimeLabel->setText(SysTime);
        this->TimeLabel->setAlignment(Qt::AlignCenter);
        this->TimeLabel->setStyleSheet("font-size: 20pt;");
        qDebug()<<UsrTime;
        qDebug()<<SysTime;
        //判断是否为用户闹钟时间
        if(SysTime == UsrTime)
        {
            qDebug()<<"闹钟";
            emit clock_signal();
        }
    }
}

//闹钟触发槽函数
void Widget::clock_slot()
{
    qDebug()<<"闹铃";
    //获取文本框内容并朗读
    QString Voice = this->HintEdit->toPlainText();
    qDebug()<<Voice;
    Voicer->say(Voice);

    //弹出窗口
    QMessageBox box(QMessageBox::Question,
                    "闹钟","五分钟后再提醒",
                    QMessageBox::Yes|QMessageBox::Cancel,
                    this);
    box.setButtonText(QMessageBox::Yes,"确认");
    box.setButtonText(QMessageBox::Cancel,"关闭");
    //显示对话框
    int res = box.exec();
    if(res == QMessageBox::Yes)
    {
       box.close();
    }else if(QMessageBox::Cancel)
    {
       emit cancel_signal();
       box.close();
    }
    
}

//void Widget::addtime_slot()
//{
//    //增加时间
//    UsrTime
    
//}

void Widget::mouseMoveEvent(QMouseEvent *event)
{
    this->move(event->globalPos() - temp);
}

void Widget::mousePressEvent(QMouseEvent *event)
{
    //记录点击时鼠标的
    temp = event->globalPos() - this->pos();
}


#include "widget.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值