Qt 0820作业

一、思维导图

二、闹钟

头文件代码

cpp 复制代码
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QTime>        //时间类
#include <QTimer>       //时间事件类
#include <QTimerEvent>  //定时器事件类
#include <QMouseEvent>  //鼠标事件类
#include <QPoint>       //向量类
#include <QMessageBox>  //对话框类
#include <QDebug>

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

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

    //重写timerEvent()函数的声明
    void timerEvent(QTimerEvent *e);

    /*鼠标事件函数声明*/
    void mousePressEvent(QMouseEvent *event) override;      //按下
    void mouseMoveEvent(QMouseEvent *event) override;       //移动

private slots:
    void on_startBtn_clicked();

private:
    Ui::Widget *ui;

    int id;     //定时器id
    QPoint p; //记录当前鼠标位置
    QTime alarmTime;    //闹钟时间
};
#endif // WIDGET_H

源文件代码

cpp 复制代码
#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    this->setWindowFlag(Qt::FramelessWindowHint);  //纯净窗口
    this->setAttribute(Qt::WA_TranslucentBackground);   //去黑框

    QDate sys_date = QDate::currentDate();
    QString date = sys_date.toString("yyyy年MM月dd日");
    ui->dataLabel->setText(date);
    //启动一个定时器
    id = startTimer(1000);  //每秒自动执行timerEvent()
}

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

//定时器超时自动执行功能函数
void Widget::timerEvent(QTimerEvent *e)
{
    int count = 0;
    if(e->timerId() == id)
    {
        //获取系统时间
        QTime sys_time = QTime::currentTime();
        //时间转换字符串
        QString time = sys_time.toString("hh:mm:ss");
        //将系统时间放入lab
        ui->timeLabel->setText(time);
        //文本居中显示
        ui->timeLabel->setAlignment(Qt::AlignCenter);
        if(sys_time >= alarmTime && !alarmTime.isNull())
        {
            ui->textEdit->setText("时间到了!");
//            qDebug() << "时间到了";
            count++;
            if(count == 10) //闹钟响一分钟
            {
                alarmTime = QTime();
                ui->textEdit->setText("~~~~~~~");
                count = 0;
            }
        }
    }
}

//重写鼠标按下事件函数实现
void Widget::mousePressEvent(QMouseEvent *event)
{
    //当前窗口坐标
    p = event->pos();
}

//重写鼠标移动事件函数实现
void Widget::mouseMoveEvent(QMouseEvent *event)
{
    //判断是否是左键按下
    if(event->buttons() == Qt::LeftButton)
    {
        //窗口移动
        this->move(event->globalPos() - p);
                        //全局坐标    当前窗口坐标
    }
}

void Widget::on_startBtn_clicked()
{
    alarmTime = QTime::fromString(ui->clockEdit->text(), "hh:mm:ss");
    if(alarmTime.isValid())
    {
        QMessageBox msg(QMessageBox::Information,
                        "提示",
                        "闹钟设置成功",
                        QMessageBox::Ok,
                        this);
        msg.exec();
    }
    else
    {
        QMessageBox msg(QMessageBox::Warning,
                        "警告",
                        "格式设置有误",
                        QMessageBox::Ok,
                        this);
        msg.exec();
    }
}
相关推荐
北冥湖畔的燕雀2 小时前
C++泛型编程(函数模板以及类模板)
开发语言·c++
QX_hao3 小时前
【Go】--map和struct数据类型
开发语言·后端·golang
你好,我叫C小白3 小时前
C语言 循环结构(1)
c语言·开发语言·算法·while·do...while
Evand J5 小时前
【MATLAB例程】基于USBL和DVL的线性回归误差补偿,对USBL和DVL导航数据进行相互补偿,提高定位精度,附代码下载链接
开发语言·matlab·线性回归·水下定位·usbl·dvl
Larry_Yanan6 小时前
QML学习笔记(四十二)QML的MessageDialog
c++·笔记·qt·学习·ui
爱喝白开水a6 小时前
LangChain 基础系列之 Prompt 工程详解:从设计原理到实战模板_langchain prompt
开发语言·数据库·人工智能·python·langchain·prompt·知识图谱
Neverfadeaway6 小时前
【C语言】深入理解函数指针数组应用(4)
c语言·开发语言·算法·回调函数·转移表·c语言实现计算器
武子康6 小时前
Java-152 深入浅出 MongoDB 索引详解 从 MongoDB B-树 到 MySQL B+树 索引机制、数据结构与应用场景的全面对比分析
java·开发语言·数据库·sql·mongodb·性能优化·nosql
杰克尼6 小时前
JavaWeb_p165部门管理
java·开发语言·前端
一成码农6 小时前
JavaSE面向对象(下)
java·开发语言