QMouseEvent事件

本文介绍使用QT开发工具实现无边框窗口的方法,通过重载鼠标事件实现窗口的右键关闭与左键拖动功能。文章详细展示了如何设置窗口为透明背景并移除边框,同时提供了具体的代码示例。

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

开发工具与关键技术: QT
作者:何文涛
撰写时间:2020-5-15

以下是代码部分:
首先头文件先重载三个函数,分别用于鼠标事件和图片
在这里插入图片描述

头文件定义
#include “widget.h”
#include “ui_widget.h”
#include
#include

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

去除窗口边框,只留下图片
//去窗口表框
setWindowFlags(Qt::FramelessWindowHint | windowFlags());

//把窗口背景设置为透明
setAttribute(Qt::WA_TranslucentBackground);

}

Widget::~Widget()
{
delete ui;
}
图片事件:
void Widget::paintEvent(QPaintEvent *)
{
QPainter p(this);
p.drawPixmap(0, 0, QPixmap("…/Image/sunny.png"));
}

鼠标点击事件,判断左右键,右键退出,左键计算左上角的坐标值
void Widget::mousePressEvent(QMouseEvent *e)
{
if(e->button() == Qt::RightButton)
{
//如果是右键
close();
}
else if(e->button() == Qt::LeftButton)
{
//求坐标差值
//当前点击坐标-窗口左上角坐标
p = e->globalPos() - this->frameGeometry().topLeft();
}
}

计算出左上角坐标P后,在根据鼠标移动方向减去p,于是就把效果做出来了
void Widget::mouseMoveEvent(QMouseEvent *e)
{
if(e->buttons() & Qt::LeftButton)
{
move(e->globalPos() - p);
}
}

运行结果:
去除掉边框后的样子,右键关闭,左键移动

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值