网站首页 > 博客文章 正文
常用操作
判断鼠标按下了哪个键
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()<<"按下了鼠标中键";
}
}
设置鼠标跟踪
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 来描述,该枚举可取以下值
QT开发交流+赀料君羊:714620761
捕获鼠标
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
#include "win.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Win w;
w.show();
return a.exec();
}
猜你喜欢
- 2024-09-29 Qt的6个简单小案例(qt官方例子)
- 2024-09-29 Qt入门阶段之事件(qt入门阶段之事件是什么)
- 2024-09-29 Qt编写安防视频监控系统9-自动隐藏光标
- 2024-09-29 Qt为什么站稳c++GUI的top1(qt quuid)
- 2024-09-29 Qt5 事件(event)机制详解(qt事件是通过什么实现的)
- 2024-09-29 Qt 保持GUI响应的几种方法(qt保存快捷键)
- 2024-09-29 Qt如何模拟鼠标点击?(qt 模拟鼠标点击)
- 2024-09-29 Qt事件的接受与忽略(qt菜单栏按钮点击事件)
- 2024-09-29 「VTK」「DICOM」修改后的VTK sample code
- 2024-09-29 Qt事件(qt事件与信号槽)
你 发表评论:
欢迎- 最近发表
-
- 给3D Slicer添加Python第三方插件库
- Python自动化——pytest常用插件详解
- Pycharm下安装MicroPython Tools插件(ESP32开发板)
- IntelliJ IDEA 2025.1.3 发布(idea 2020)
- IDEA+Continue插件+DeepSeek:开发者效率飙升的「三体组合」!
- Cursor:提升Python开发效率的必备IDE及插件安装指南
- 日本旅行时想借厕所、买香烟怎么办?便利商店里能解决大问题!
- 11天!日本史上最长黄金周来了!旅游万金句总结!
- 北川景子&DAIGO缘定1.11 召开记者会宣布结婚
- PIKO‘PPAP’ 洗脑歌登上美国告示牌
- 标签列表
-
- ifneq (61)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)