Qt5鼠标事件
常用操作
判断鼠标按下了哪个键
-
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
-
-
-
-
-
-
-
-
class MyButton : public QPushButton
-
{
-
public:
-
MyButton();
-
void mousePressEvent(QMouseEvent *e);
-
};
-
-
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
-
-
-
-
-
-
-
-
class Win : public QWidget
-
{
-
Q_OBJECT
-
-
public:
-
Win(QWidget *parent = nullptr);
-
~Win();
-
-
void mousePressEvent(QMouseEvent *e);
-
-
private:
-
MyButton* button;
-
-
};
-
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
-
-
-
-
-
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模块,面试题等等)↓↓↓↓↓↓见下面↓↓文章底部点击莬费领取↓↓
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgefgec
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01