Qt实现无边框窗体的移动
来源:互联网 发布:法国兴业银行巨亏数据 编辑:程序博客网 时间:2024/05/06 13:45
本文内容,基本参考自互联网,所以定义为转载。
我们知道360安全卫士的界面是没有外边框的,去除外边框
setWindowFlags(Qt::FramelessWindowHint);
但是去除边框之后,无法移动整个窗体,为了实现这个移动效果,需要重新实现三个函数
void mousePressEvent(QMouseEvent * e); void mouseReleaseEvent(QMouseEvent * e); void mouseMoveEvent(QMouseEvent * e);
对应的实现如下
void FramelessMoveWindow::mousePressEvent(QMouseEvent *e){ if (e->button() == Qt::LeftButton) { mMousePoint = e->globalPos() - this->pos(); e->accept(); mDragWindow = true; }}void FramelessMoveWindow::mouseReleaseEvent(QMouseEvent */*e*/){ mDragWindow = false;}void FramelessMoveWindow::mouseMoveEvent(QMouseEvent *e){ if (mDragWindow && (e->buttons() && Qt::LeftButton)) { this->move(e->globalPos() - mMousePoint); e->accept(); }}
有人可能觉得只实现下面两个函数也是可以的
void mousePressEvent(QMouseEvent * e); void mouseMoveEvent(QMouseEvent * e);
但是当你窗体上有别的控件接收了press事件的话,会出现窗体闪烁的情况
在构造函数里添加代码
QPushButton *button = new QPushButton(this); button->setText("Button");
当你点击这个button的话,会发现只实现press函数和move函数,是有问题的。
关于左键单击的判断和左键移动的判断的条件处理
//左键单击 if (e->button() == Qt::LeftButton) { }//左键移动if (e->buttons() && Qt::LeftButton) { }为什么两次判断左键的方式不一样呢?
因为在
void mouseMoveEvent(QMouseEvent *e)
里面e->button()返回的一直是QT::NoButton
0 0
- Qt实现无边框窗体的移动
- QT实现无边框的可移动窗体
- qt 移动无边框的窗体
- Qt:移动无边框窗体
- Qt - 移动无边框窗体
- Qt移动无边框窗体
- Qt:移动无边框窗体
- Qt中实现无边框的窗体
- Qt 无边框、透明、可移动的个性窗体
- Qt 无边框、透明、可移动的个性窗体
- Qt 无边框、透明、可移动、的个性窗体
- Qt学习笔记:无边框窗体的移动
- Qt—移动无边框窗体
- Qt学习二:移动无边框窗体
- Qt无边框窗体移动和缩放
- Delphi如何实现无边框窗体的移动
- C# 无边框窗体移动和改变大小的实现
- 使用C#实现移动无边框窗体
- Oracle SQL Developer安装教程
- HDU2000~2005——题目合集
- 开通自己的博客啦!
- hdoj 最小长方形 1859 (水)
- leetcode:41. First Missing Positive (Java)
- Qt实现无边框窗体的移动
- js数据层中间件单页运用简单构思和应用案例
- BZOJ 3339/3585 Rmq Problem/mex 莫队算法
- 递归与算法分析(一)递归总论
- 第2周项目4-用循环求
- 新手如何快速入门node.js
- 多线程的学习
- makefile中的小细节
- 记录github出错及解决方案