10.9QT对话框以及QT的事件机制处理

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

MouseMoveEvent(鼠标移动事件)

widget.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->setMouseTracking(true);
}

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

// 处理鼠标移动事件
void Widget::mouseMoveEvent(QMouseEvent *event) {
    // 使 QLabel 跟随鼠标移动,将鼠标位置设置为 QLabel 的中心
    ui->label->move(event->x() - ui->label->width() / 2, event->y() - ui->label->height() / 2);

    // 如果鼠标左键按下,拖动整个窗口
    if (event->buttons() == Qt::LeftButton) {
        // 将窗口移动到鼠标全局位置减去初始的相对位移
        this->move(event->globalPos() - temp);
    } 
    // 如果鼠标右键按下,关闭窗口
    else if (event->buttons() == Qt::RightButton) {
        this->close(); // 关闭窗口
    }
}

// 处理鼠标按下事件
void Widget::mousePressEvent(QMouseEvent *event) {
    // 记录鼠标按下时,鼠标全局位置与窗口左上角位置的差值,用于实现拖动效果
    temp = event->globalPos() - this->pos();
}


widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include<QMouseEvent>  // 包含用于鼠标事件处理的头文件
#include<QPoint>       // 包含 QPoint 类,用于表示点的位置

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

// 定义 Widget 类,继承自 QWidget
class Widget : public QWidget
{
    Q_OBJECT  // 宏,启用 Qt 的信号与槽机制

public:
    // 构造函数,初始化父类 QWidget
    Widget(QWidget *parent = nullptr);

    // 析构函数,释放资源
    ~Widget();

    // 用于存储鼠标按下时的全局位置与窗口左上角位置的差值,用于窗口拖动
    QPoint temp;

    // 重写鼠标移动事件处理函数,用于处理鼠标移动时的逻辑
    void mouseMoveEvent(QMouseEvent *event) override;

    // 重写鼠标按下事件处理函数,用于处理鼠标按下时的逻辑
    void mousePressEvent(QMouseEvent *event) override;

private:
    // 指向 UI 界面的指针,管理界面控件
    Ui::Widget *ui;
};

#endif // WIDGET_H

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值