QMouseEvent
文章目录
- 1 QMouseEvent
- 1.1 特别说明
- 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_OBJECTpublic: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 // WIDGET_H
实现文件:
#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();//mouseStartPoint = event->pos();//获得窗口的初始位置windowTopLeftPoint = this->frameGeometry().topLeft();}
}void Widget::mouseMoveEvent(QMouseEvent *event)
{if(m_bDrag) {//获得鼠标移动的距离//QPoint distance = event->pos() - mouseStartPoint;QPoint distance = event->globalPos() - mouseStartPoint;//改变窗口的位置this->move(windowTopLeftPoint + distance);/*注意:一般定位鼠标坐标使用的是event->pos()和event->globalPos()两个函数,event->pos()鼠标相对于当前活动窗口左上角的位置event->globalPos()获取的鼠标位置是鼠标偏离电脑屏幕左上角(x=0,y=0)的位置;一般不采用前者,使用前者,拖动准确性较低且会产生抖动。*/}
}void Widget::mouseReleaseEvent(QMouseEvent *event)
{if(event->button() == Qt::LeftButton){m_bDrag = false;}
}
需要特别注意:在鼠标移动过程中必须通过buttons()来判断是哪个按键按下。因为button函数:
QMouseEvent相关推荐
- QMouseEvent鼠标事件简介
一.QMouseEvent的详细描述 首先请注意,Qt中的QMouseEvent一般只涉及鼠标左键或右键的单击.释放等操作,而对鼠标滚轮的响应则通过QWheeEvent来处理. QMouseEvent ...
- qt linux 鼠标事件,QT学习笔记5:QMouseEvent鼠标事件简介
一.QMouseEvent的详细描述 首先请注意,Qt中的QMouseEvent一般只涉及鼠标左键或右键的单击.释放等操作,而对鼠标滚轮的响应则通过QWheeEvent来处理. QMouseEvent ...
- QMouseEvent 的坐标__Win
1. QMouseEvent.x() 和 QMouseEvent.y() 是窗口里面的坐标,相当于 Windows API 里面的 ClientX和ClientY . 2. QMouseEvent.G ...
- paintevent参数_Qt学习: QPaintEvent和QMouseEvent的简单程序示例
QMouseEvent下可以被重写的虚函数: 1.void mousePressEvent(QMouseEvent *event); //鼠标键被按下的事件. 2.void mouseReleaseE ...
- QT 事件系统之QMouseEvent鼠标事件
概述 在Qt中,鼠标事件被封装成.QMouseEvent对象,QMouseEvent中包含一些参数,用描述鼠标事件. 在QT中,鼠标事件包含:鼠标按键按下,鼠标按键释放,鼠标双击事件,鼠标移动事件. ...
- 鼠标事件:QMouseEvent
#include<QMouseEvent> 鼠标无论是点击,移动,双击,松开都由鼠标的左右键区别而有区别,所以,严谨的来使用就是如mousePressEvent一样来通过按下的键来区别对待 ...
- Qt中mouseMoveEvent(QmouseEvent *event)使用探讨
Qt中mouseMoveEvent(QmouseEvent *event)使用探讨 在学习网络教程过程中,尝试使用Qpainter制作一个涂鸦板,需要使用QmouseEvent ,按照教程,涂鸦板不能 ...
- Qt鼠标点击不响应QMouseEvent事件的解决办法
最近在写程序在和同事合完代码后发现一个问题,项目是使用qt开发一个程序,有一个功能是要实现地图的标记功能,我需要在一个label控件上显示地图,然后再选中标记按钮后点击地图,会在鼠标点击的位置放置一个 ...
- 【转】QMouseEvent鼠标事件简介
首先请注意, Qt中的QMouseEvent一般只涉及鼠标左键或右键的单击.释放等操作 ,而对 鼠标滚轮的响应则通过QWheeEvent来处理 . 以下内容来自QMouseEvent的API文档. 1 ...
最新文章
- 视频互动直播软件开发中的连麦问题分析
- C#命名规范 C#控件的缩写大全
- Highmaps网页图表教程之图表配置项结构与商业授权
- (转载)VS2010/MFC编程入门之五十四(Ribbon界面开发:使用更多控件并为控件添加消息处理函数)...
- 多目标优化算法_【实验室论文】基于多种群协同演化的约束多目标优化算法
- C/C++如何传递二维数组?
- Socket,非阻塞,fcntl
- Python这门语言为什么适合初学者?88.7%的小白听了会感谢选择它
- 如何做到免驱打印_道滘镇彩色打印机租赁公司,长安镇办公室绿植安装
- 从vivo 大规模特征存储实践中学点经验
- 一个 TypeScript keyof 泛型用法
- php gmssl,GmSSL是什么
- QQ浏览器,正式推出,9.0版本又多些好东西!
- 初次接触面元法对螺旋桨的性能预报,发现之前很多学者都是用fortran进行编程进行性能预报,为什么不用matlab呢,两者的差异在哪里,建议初学者用这哪个软件呢
- union和union all哪个效率高
- 在Redhat9上安装Oracle 9.2
- TreeMap集合怎样依照Value进行排序
- 关于vs中出现lnk2019和lnk1120错误
- 移动端SEO的一些疑问
- 计算机理论导引 期末,计算机理论导引实验报告_CFG是P成员