文章目录
- 1 QMouseEvent
-
- 2 通过QMouseEvent事件实现窗口移动
1 QMouseEvent
1.1 特别说明
QMouseEvent没啥要注意的,就是对于mouseMoveEvent,默认情况下,触发事件需要点击一下,才能触发。可设置为自动触发:setMouseTracking(true);
。
2 通过QMouseEvent事件实现窗口移动
实现起来还是比较简单的。
头文件:
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = nullptr);
~Widget();
private:
Ui::Widget *ui;
protected:
void mousePressEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
private:
bool m_bDrag;
QPoint mouseStartPoint;
QPoint windowTopLeftPoint;
};
#endif
实现文件:
#include "widget.h"
#include "ui_widget.h"
#include <QMouseEvent>
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget),
m_bDrag(false)
{
ui->setupUi(this);
setWindowTitle("窗口拖拽移动");
setFixedSize(640, 480);
}
Widget::~Widget()
{
delete ui;
}
void Widget::mousePressEvent(QMouseEvent *event)
{
if(event->button() == Qt::LeftButton)
{
m_bDrag = true;
mouseStartPoint = event->globalPos();
windowTopLeftPoint = this->frameGeometry().topLeft();
}
}
void Widget::mouseMoveEvent(QMouseEvent *event)
{
if(m_bDrag)
{
QPoint distance = event->globalPos() - mouseStartPoint;
this->move(windowTopLeftPoint + distance);
}
}
void Widget::mouseReleaseEvent(QMouseEvent *event)
{
if(event->button() == Qt::LeftButton)
{
m_bDrag = false;
}
}
需要特别注意:在鼠标移动过程中必须通过buttons()来判断是哪个按键按下。因为button函数:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)