QT无边框窗口鼠标拖动事件

app.h
class app: public QDialog
{
Q_OBJECT
private:
bool moving = false; //表示窗口是否在鼠标操作下移动
QPoint m_lastPos; //上一次鼠标的位置
protected:
// 鼠标 拖动窗口的 鼠标事件
void mousePressEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
public:
explicit app(QWidget *parent = nullptr);
~app();
}

app.c

void Dialogin::mousePressEvent(QMouseEvent *event)
{
m_moving = true;
m_lastPos = event->globalPos() - pos();
return QDialog::mousePressEvent(event);
}

void Dialogin::mouseMoveEvent(QMouseEvent *event)
{
if(m_moving && (event->buttons() && Qt::LeftButton) && (event->globalPos() - m_lastPos).manhattanLength() > QApplication::startDragDistance())
{
move(event->globalPos() - m_lastPos);
m_lastPos = event->globalPos() - pos();
}
return QDialog::mouseMoveEvent(event);
}

void Dialogin::mouseReleaseEvent(QMouseEvent *event)
{
m_moving = false;
}
Qt中实现无边框放大缩小拖动界面可以使用以下方法: 1. 设置窗口边框 使用setWindowFlags()函数设置窗口边框,示例代码如下: ```python self.setWindowFlags(Qt.FramelessWindowHint) ``` 2. 实现窗口放大缩小 使用QDesktopWidget类获取屏幕的宽度和高度,然后通过setGeometry()函数设置窗口的大小,示例代码如下: ```python desktop = QApplication.desktop() width = desktop.width() height = desktop.height() self.setGeometry(0, 0, width, height) ``` 3. 实现窗口拖动 重载鼠标事件函数,实现窗口拖动功能。在mousePressEvent()函数中记录鼠标按下时的位置,然后在mouseMoveEvent()函数中计算鼠标移动的距离,将窗口移动到相应的位置,示例代码如下: ```python def mousePressEvent(self, event): self.mouse_pos = event.globalPos() - self.pos() def mouseMoveEvent(self, event): self.move(event.globalPos() - self.mouse_pos) ``` 完整代码示例: ```python from PyQt5.QtWidgets import QApplication, QWidget from PyQt5.QtCore import Qt class MainWindow(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.setWindowFlags(Qt.FramelessWindowHint) self.setGeometry(0, 0, 800, 600) self.show() def mousePressEvent(self, event): self.mouse_pos = event.globalPos() - self.pos() def mouseMoveEvent(self, event): self.move(event.globalPos() - self.mouse_pos) if __name__ == '__main__': app = QApplication([]) window = MainWindow() app.exec_() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值