day03 1.Qt核心机制

widget.h

复制代码
#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QTimer>            //定时器类
#include <QTime>            //时间类
#include <QTimerEvent>       //定时器事件类
#include <QDateTime>         //日期时间类
#include <QPushButton>
#include <QTextEdit>
#include <QLCDNumber>
#include <QLineEdit>
#include <QKeyEvent>          //键盘事件类
#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 mouseMoveEvent(QMouseEvent *event) override;
    void mousePressEvent(QMouseEvent *event) override;         //鼠标移动事件处理函数
signals:
    void btn1_signal();
    void btn2_signal();




public slots:
    void btn1_slots();
    void btn2_slots();

    void timeout_slot();  //自定义处理超时信号的槽函数

private:
    Ui::Widget *ui;
    QPoint temp;        //中间辅助向量

    QPushButton *btn1;
    QPushButton *btn2;
    QTextToSpeech *speecher;     //定义播报员指针
    QLCDNumber *lcdNumber;

    //定义一个定时器变
    QTimer t1;
};
#endif // WIDGET_H

widget.cpp

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

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
    , btn1(new QPushButton(this))
    , btn2(new QPushButton(this))
    , lcdNumber(new QLCDNumber(this)) // 初始化 QLCDNumber
    , t1(new QTimer(this))
{
    ui->setupUi(this);

    this->setWindowFlag(Qt::FramelessWindowHint);   //去除控件的头部

    btn1 ->setParent(this);     //将自定义的界面当作按钮的父组件
    btn2 ->setParent(this);
    btn1 ->setText("启动");
    btn2 ->setText("取消");
    btn1 ->move(450,200);
    btn2 ->move(600,200);

    QTextEdit *textEdit = new QTextEdit(this);    //设置文本框
    textEdit->setPlaceholderText("请输入");        // 设置占位符文本
    textEdit ->setGeometry(50,250,700,300);      //设置位置和大小

    lcdNumber->setGeometry(50,50,300,150);

    QLineEdit *lineEdit = new QLineEdit(this);
    lineEdit ->setGeometry(450,50,300,100);

    //将按钮1绑定到对应的槽函数1上
    connect(this->btn1,&QPushButton::clicked,[this](){this->btn1_slots();});
    //将按钮2绑定到对应的槽函数2上
    connect(this->btn2,&QPushButton::clicked,[this](){this->btn2_slots();});

    connect(&t1, &QTimer::timeout, this, &Widget::timeout_slot);
}

Widget::~Widget()
{
    delete ui;
    delete lcdNumber; // 删除 QLCDNumber 实例
}

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

void Widget::mousePressEvent(QMouseEvent *event)
{
    temp = event->globalPos() - this->pos();
    if(event->button() == Qt::RightButton)
    {
        this->close();
    }
}

void Widget::btn1_slots()   //自定义槽函数的实现
{
    t1.start(1000);        //每隔指定的时间,发送一个timeout的信号
}

void Widget::btn2_slots()   //自定义槽函数的实现
{
    t1.stop();
}

void Widget::timeout_slot()
{
    //获取系统的时间
    QTime sysTime = QTime::currentTime();
    //将QTime类对象转变成字符串
    QString tm = sysTime.toString("hh:mm");
    //将时间展示到ui界面上
    this->lcdNumber->display(tm);

    if(sysTime.second()%2==0)
    {
        tm[2] = ':';
    }else
    {
        tm[2] = ' ';
    }


    this->lcdNumber->display(tm);


}
相关推荐
尘中远2 小时前
【Qwt 7.0 系列】坐标轴与刻度系统 —— 刻度引擎、网格、图例与刻度朝内
qt·数据可视化·qcustomplot·qwt·工业软件·科学绘图
sycmancia4 小时前
Qt——多线程间的互斥
开发语言·qt
尘中远10 小时前
【Qwt 7.0 系列】常用图表类型实战 —— 柱状图、散点图、箱线图与直方图
qt·qwt·工业软件·科学绘图
尘中远10 小时前
【Qwt 7.0 系列】交互功能详解 —— 平移、缩放、坐标轴交互与数据拾取
qt·数据可视化·绘图·qcustomplot·qwt·科学绘图
sycmancia10 小时前
Qt——进程与线程的概念
qt
郝学胜-神的一滴11 小时前
Qt 高级编程 034:深耕QWidget底层内核—彻底吃透无边框窗口设计核心原理
开发语言·c++·qt·程序人生·软件开发·用户界面
尘中远11 小时前
【Qwt 7.0 系列】3D 数据可视化 —— OpenGL 高性能三维绘图
qt·3d·qcustomplot·qwt·科学绘图·高性能绘图
满天星830357712 小时前
【Qt】控件(二) (geometry及与frameGeometry的区别)
开发语言·qt
大气的小蜜蜂12 小时前
基于Python+PyQt5+SQLite的药房管理系统实现:事务一致性与界面解耦全流程解析
python·qt·sqlite
尘中远12 小时前
【Qwt 7.0 系列】总体架构解析 —— 从单体到三库模块化的演进
qt·matplotlib·绘图·qwt·科学绘图