常用操作
判断鼠标按下了哪个键
void Win::mousePressEvent(QMouseEvent *e)
{
if(e->button() == Qt::LeftButton) //如果鼠标按下的键是左键
//e->button() 返回鼠标当时按下的键--触发事件的键
{
qDebug()<<"按下了鼠标左键:"<<e->button();
}
if(e->button() == Qt::RightButton) //如果鼠标按下的键是右键
{
qDebug()<<"按下了鼠标右键";
}
if(e->button() == Qt::MidButton) //如果鼠标按下的键是中键
{
qDebug()<<"按下了鼠标中键";
}
}
本文福利,莬费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓
设置鼠标跟踪
setMouseTracking(true); //设置鼠标跟踪--不按住鼠标也能产生鼠标移动事件
//默认是当按下鼠标按键时移动鼠标,鼠标移动事件才会产生
//如果想不按鼠标按键,也可以获得鼠标移动事件,可以构造函数上添加这一行
bool b=hasMouseTracking(); //返回鼠标跟踪状态
qDebug()<<b;
鼠标移动事件
void Win::mouseMoveEvent(QMouseEvent *e)
{
static int i=0;
QPoint point;
point=e->pos(); //返回鼠标的坐标(相对于控件) QPoint(635,13)
//每个Qwidget都能通过pos()获取到相对自己父类窗口的位置
qDebug()<<"移动了鼠标:"<<i++<<" "<<point;
int x=e->pos().x(); //返回鼠标的x坐标(相对于控件)
int y=e->pos().y(); //返回鼠标的y坐标(相对于控件)
x=e->x(); //返回鼠标的x坐标(相对于控件)
y=e->y(); //返回鼠标的y坐标(相对于控件)
QPointF pointF;
pointF=e->localPos();//返回鼠标的坐标(相对于控件)
//QPointF(635,13)
QPoint point1;
QPoint point2;
point1=mapToGlobal(point); //将窗口坐标转换成屏幕坐标
point2=mapFromGlobal(point1); //将相对于屏幕的坐标转换成相对于窗口的坐标
point2=e->globalPos(); //返回鼠标相对于屏幕的坐标
/*
mapToParent(QPoint) - 将窗口坐标转换成父窗口坐标。如果没有父窗口,则相当于mapToGlobal (QPoint)
mapFromParent(QPoint) - 将父窗口坐标转换成窗口坐标。如果没有父窗口,则相当于mapFromGlobal(QPoint)
mapTo (QWidget, QPoint) - 将窗口坐标转换成 QWidget父窗口坐标
*/
x=e->globalX(); //返回相对于屏幕的x坐标
y=e->globalY(); //返回相对于屏幕的y坐标
pointF=e->windowPos(); //返回相对于窗口的坐标
//QPointF(560,0)
pointF=e->screenPos(); //相对于屏幕的坐标
//QPointF(1266,280)
int t;
t=e->timestamp(); //返回事件发生的时间。【以程序运行开始计时,以毫秒为单位】
qDebug()<<t;
}
鼠标双击事件
void Win::mouseDoubleClickEvent(QMouseEvent *e)
{
//方法返回双击的时间间隔
qDebug()<<"双击了鼠标";
/*
双击时的事件顺序如下:
MouseButtonPress
MouseButtonRelease
MouseButtonDblClick
MouseButtonPress
MouseButtonRelease
setDoubleClickInterval( )方法可设置双击的时间间隔
doubleClickInterval( )方法返回双击的时间间隔
*/
}
鼠标滚轮事件
void Win::wheelEvent(QWheelEvent *e)
{
QPoint point=e->angleDelta(); //返回滚轮转过的数值,单位为1/8度
//QPoint(0,120)--向上滚 QPoint(0,-120)--向下滚
point=point/8; //除以8之后单位为度
//QPoint(0,15)
qDebug()<<point;
}
ev->pixelDelta(); //返回屏幕上以像素为单位的滚动距离。此值是在支持基于高分辨率像素的delta值的平台(如macos)上提供的。该值应直接用于在屏幕上滚动内容
鼠标按住事件
void Win::mousePressEvent(QMouseEvent *e)
{
static int i=0;
qDebug()<<e->button();
//e->button() 只返回一个键--触发事件的键
qDebug()<<e->buttons();
//e->buttons() 返回的是鼠标的按键情况--返回哪些键被按下
//QFlags<Qt::MouseButton>(LeftButton|RightButton)
if(e->buttons() & Qt::LeftButton){ //如果按住了左键
//e->buttons() & Qt::LeftButton 返回左键是否被按住
qDebug()<<"你按下了左键:"<<i;
}
if(e->buttons() & Qt::LeftButton && e->buttons() & Qt::RightButton ){ //如果按住了左键和右键
qDebug()<<"你按下了左键和右键:"<<i;
}
if(e->buttons() & Qt::LeftButton && e->buttons() & Qt::MidButton ){ //如果按住了左键和中键
qDebug()<<"你按下了左键和中键:"<<i;
}
i++;
}
鼠标事件的来源
Qt::MouseEventSource source() const; 返回鼠标事件的来源信息。鼠标事件除了可以来自于物理鼠标之外,还可以来自于其 他来源,比如触摸屏的仿真鼠标事件。鼠标事件的来源使用枚举Qt::MouseEventSource 来描述,该枚举可取以下值
捕获鼠标
mybutton.h
#ifndef MYBUTTON_H
#define MYBUTTON_H
#include <QPushButton>
#include <QDebug>
#include <QMouseEvent>
class MyButton : public QPushButton
{
public:
MyButton();
void mousePressEvent(QMouseEvent *e);
};
#endif // MYBUTTON_H
mybutton.cpp
#include "mybutton.h"
MyButton::MyButton()
{
}
void MyButton::mousePressEvent(QMouseEvent *e)
{
static int i=0;
qDebug()<<"button鼠标事件:"<<i;
QWidget* ww= mouseGrabber(); //返回正在捕获鼠标输入的部件,若没有则返回 0
//QPushButton(0x2f2f210)
qDebug()<<"正在捕获的控件:"<<ww;
bool b= this->underMouse(); //若部件位于鼠标光标之下,则返回 true,否则返回 false
//【这个函数:在鼠标被捕获时返回值不准】
if(e->button() == Qt::MidButton) //如果鼠标按下的键是中键
{
qDebug()<<"按下了鼠标中键";
this->releaseMouse(); ///释放捕获的鼠标
}
qDebug()<<b;
i++;
}
win.h
#ifndef WIN_H
#define WIN_H
#include <QWidget>
#include <QDebug>
#include "mybutton.h"
class Win : public QWidget
{
Q_OBJECT
public:
Win(QWidget *parent = nullptr);
~Win();
void mousePressEvent(QMouseEvent *e);
private:
MyButton* button;
};
#endif // WIN_H
win.cpp
#include "win.h"
Win::Win(QWidget *parent)
: QWidget(parent)
{
this->resize(200,200);
button=new MyButton();
button->setParent(this);
button->setText("AAA");
button->move(10,10);
button->resize(100,100);
button->grabMouse(); //指定控件捕获鼠标
/*使按钮 AAA 捕获鼠标,此时产生的鼠标事件都只会发送给按钮 AAA,也就是说
其他部件无法获得鼠标事件。
只有可见的部件才能捕获鼠标输入,若 isVisible()返回 false,则该部件不能调用 grabMouse()函数
void grabMouse(const QCursor &cursor) //捕获鼠标输入,并改变光标的形状
*/
}
Win::~Win()
{
}
void Win::mousePressEvent(QMouseEvent *e)
{
bool b=button->underMouse();
qDebug()<<"win鼠标事件"<<b;
}
main.cpp文章来源:https://www.toymoban.com/news/detail-659000.html
#include "win.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Win w;
w.show();
return a.exec();
}
本文福利,莬费领取Qt开发学习资料包、技术视频,内容包括(C++语言基础,Qt编程入门,QT信号与槽机制,QT界面开发-图像绘制,QT网络,QT数据库编程,QT项目实战,QSS,OpenCV,Quick模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓文章来源地址https://www.toymoban.com/news/detail-659000.html
到了这里,关于Qt5鼠标事件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!