qt鼠标事件总结

QT学习之 鼠标事件 在 Qt Designer 中创建一个 Dialog 窗口,并将一个。中,计算新位置,并确保不超出父窗口边界。方法,检测左键点击,并切换背景色。的类名修改为自定义的类名(创建一个自定义类(例如。方法,实现拖拽逻辑。用户可以通过拖拽来移动。 阅读详情
1、QMouseEvent中的坐标
QMouseEvent中保存了两个坐标,一个是全局坐标,当然另外一个是局部坐标。
全局坐标(globalPos())即是桌面屏幕坐标(screencoordinates),这个跟windows下的调用getCursorPos函数得到的结果一致。
局部坐标(pos())即是相对当前active widget的坐标,左上角坐标为(0, 0)。

补充一个公式:
this->mapFromGlobal(this->cursor().pos())= event.pos()

2、鼠标跟踪
在qt中,鼠标跟踪对应函数mouseMoveEvent。但是,默认情况下他并不能如期象你想象的那样响应鼠标的移动。此时,你只需在合适的位置调用一下函数setMouseTracking(true)即可。
If mouse tracking is switched off, mouse move events only occur ifa mouse button is pressed while the mouse is being moved.
If mouse tracking is switched on, mouse move events occur even ifno mouse button is pressed.
默认情况下,mouseMoveEvent响应你按下鼠标的某个键(拖动,但不局限于左键拖动)的鼠标移动。

3、鼠标左键拖动和左键点击的判断
鼠标左键点击很容易判断,一般就是在重写mousePressEvent函数,示例如下:
void XXXWidget::mousePressEvent(QMouseEvent *event)
{
if(event->button() == Qt::LeftButton)
{
 
     // todo...
}
}
左键拖动的判断一般放在mouseMoveEvent函数中,但是你不能向上例一样来判断,因为该函数的event参数总是返回Qt::NoButton。你可以这样做:
void XXXWidget::mouseMoveEvent(QMouseEvent *event)
{
if(event->buttons() &Qt::LeftButton)
{
      // todo...
}
}
参考教材实例,增加了注释和新功能,方便大家交流学习
// mouseevent.cpp
#include "mouseevent.h"
MouseEvent::MouseEvent( ):


QMainWindow()
{
    setWindowTitle(tr("GetMouse Event"));
    setCursor(Qt::CrossCursor);//设置鼠标为十字星
    labelStatus= new QLabel();
    labelStatus->setMinimumSize(500,20);
    labelStatus->setFrameShape(QFrame::WinPanel);//设置标签形状
    labelStatus->setFrameShadow(QFrame::Sunken);//设置标签阴影;
    labelStatus->setText(tr("MousePosition:"));
    labelStatus-> setFixedWidth (100);
    labelMousePos= new QLabel();
    labelMousePos->setText(tr(""));
    labelMousePos-> setFixedWidth (100);
    statusBar()->addPermanentWidget(labelStatus);//给状态栏添加永久的部件
    statusBar()->addPermanentWidget(labelMousePos);
    this->setMouseTracking( true);//自动跟踪鼠标(默认情况下,mouseMoveEvent响应你按下鼠标的某个键的鼠标移动。)
  }
  
MouseEvent::~MouseEvent(){


}


void MouseEvent::mouseMoveEvent ( QMouseEvent * e )//鼠标移动事件响应
{    
    //1.获取局部鼠标位置
    labelMousePos->setText("("+QString::number(e->x())+","+QString::number(e->y())+")");
    //2.获取全局鼠标位置
    QPointcoursePoint;
    coursePoint= QCursor::pos();//获取当前光标的位置
    labelMousePos->setText("("+QString::number(coursePoint.x())+","+QString::number(coursePoint.y())+")");
}


void MouseEvent::mousePressEvent ( QMouseEvent * e)//鼠标单击事件响应
{
   QStringstr="("+QString::number(e->x())+","+QString::number(e->y())+")";
  if(e->button()==Qt::LeftButton){
      statusBar()->showMessage(tr("Mouse Left Button Pressed:")+str);//显示临时信息
   }
   elseif(e->button()==Qt::RightButton){
                statusBar()->showMessage(tr("Mouse Right Button Pressed:")+str);
          }
          elseif(e->button()==Qt::MidButton){
                      statusBar()->showMessage (tr("Mouse Middle ButtonPressed:")+str);
        }
   }


void MouseEvent::mouseDoubleClickEvent( QMouseEvent * e)//鼠标双击事件响应
{      QStringstr="("+QString::number(e->x())+","+QString::number(e->y())+")";
        if(e->button()==Qt::LeftButton){
              statusBar()->showMessage (tr("Mouse Left ButtonDouble Clicked:")+str);
          }
        else if(e->button()==Qt::RightButton){
                      statusBar()->showMessage (tr("Mouse Right ButtonDouble Clicked:")+str);
                }
              else if(e->button()==Qt::MidButton){
                            statusBar()->showMessage (tr("Mouse Middle ButtonDouble Clicked:")+str);
                      }
}


void MouseEvent::mouseReleaseEvent ( QMouseEvent * e)//鼠标松开事件响应
{
        QStringstr="("+QString::number(e->x())+","+QString::number(e->y())+")";
        statusBar()->showMessage (tr("MouserReleased:")+str,3000);
}


-------------//  mouseevent.h
#ifndef MOUSEEVENT_H
#define MOUSEEVENT_H


#include <QtGui>
class MouseEvent : public QMainWindow
{                    Q_OBJECT
            public:MouseEvent();
          ~MouseEvent();
private:
      QLabel*labelStatus;
      QLabel*labelMousePos;
      protected:
          voidmouseMoveEvent ( QMouseEvent * e );
          voidmousePressEvent ( QMouseEvent * e );
          voidmouseReleaseEvent ( QMouseEvent * e );
          voidmouseDoubleClickEvent( QMouseEvent * e );
};


#endif


//main.cpp


#include
<QtGui/QApplication>
#include "mouseevent.h"
int main(int argc, char *argv[])
{
    QApplicationapp(argc, argv);
    MouseEventw;w.show();
    returnapp.exec();
}
Qt学习之路之鼠标事件 鼠标事件包括移动,鼠标按下,释放(松开),单击,双击....... 要自定义鼠标事件,需重写虚函数: void QWidget::mousePressEvent(QMouseEvent * event) [virtual protected] void QWidget::mouseReleaseEvent(QMouseEvent * event) [virtual protected] v 阅读详情

相关推荐

Qt鼠标响应事件

VS2010进行Qt开发——鼠标事件本文将简单的鼠标点击事件的代码进行了测试整理,编程中主要用到三个文件:xxx.ui(界面),xxx.h(头文件)和xxx.cpp(c++实现代码)。具体如下:1. 打开新建项目Test的“test.ui”文件(使用Qt Designer打开ui文件),手动向ui添加一个“line Editor”。2. “test.h”文件添加鼠标点击,移动,释放事件函数的声明。...

lrsage 1万+

Qt鼠标事件全面解析:从基础到实战

Qt鼠标事件全面解析:从基础到实战

探索C++编程的奥秘,分享深入的技术见解和实践,旨在激发读者创造力与解决问题的思维。 8323

Qt移动窗体之鼠标事件的重写

在使用Qt开发界面时往往会涉及使用鼠标拖动窗体,鼠标可以直接按住窗体边框拖动,当鼠标按住窗体内部拖动时就需要重写鼠标事件。 重写鼠标事件来移动窗体的思路有两种 第一种:移动位置=(鼠标移动位置)-(鼠标相对于窗体左上角的位置) //鼠标按下事件 void MainWindow::mousePressEvent(QMouseEvent *event) { dragPosition=e...

Yangson工作室 8528

QT的使用3:鼠标事件

鼠标事件,事件分发机制

weixin_44457930的博客 5491

Qt事件系统:鼠标事件和滚轮事件

QMouseEvent 类用来表示一个鼠标事件,当在窗口部件中按下鼠标、释放鼠标和移动鼠标指针时,都会产生鼠标事件 QMouseEvent。利用 QMouseEvent 类可以获知鼠标是哪个键按下释放了、鼠标指针的当前位置等信息。通常是重定义窗口部件的鼠标事件处理函数来进行一些自定义的操作。多个重叠的窗口在实现里好比一个递归的倒立树,鼠标事件会沿着鼠标指针所在的父窗口的链表向上传递,直到某个窗口调用 accept() 函数进行事件处理,否则该事件将被过滤销毁掉。

QtCompany的博客 2332

QT 模拟鼠标事件

<br />模拟鼠标按键<br />和模拟键盘按键类似,也是通过发送相应的事件来实现的,安装相应的事件监听器,具体发送事件:<br />QPoint pos;<br />pos.setX(88);<br />pos.setY(58);<br />QMouseEvent *mEvnPress;<br />QMouseEvent *mEvnRelease;<br />mEvnPress = new QMouseEvent(QEvent::MouseButtonPress, pos, Qt::LeftButton

yanchong_RD的专栏 1万+

【Qt】事件

事件是应用程序内部或者外部产生的事情或者动作的统称。在Qt中使用一个对象来表示一个事件。所有的Qt事件均继承于抽象类QEvent。事件是由系统或者Qt平台本身在不同的时刻发出的。当用户按下鼠标、敲下键盘,或者是窗口需要重新绘制时,都会发出一个相应的事件。一些事件是在用户操作时发出,如键盘事件、鼠标事件等,另一些事件则是由系统本身自动发出,如定时器事件。

GG_Bruse的博客 2703

Qt编程实战-鼠标事件处理

在上述代码中,我们首先创建了一个名为MousePress的窗口类,然后重载了它的mousePressEvent()函数,在该函数中弹出一个提示框。Qt是一个跨平台的C++图形用户界面应用程序开发框架,具有简单易学、高效灵活的特点。在Qt中,处理鼠标响应事件是很常见的操作之一。通过下面的示例代码,可以更好地理解如何使用Qt处理鼠标事件。本文详细介绍了Qt如何处理鼠标事件,并提供了一个示例代码。Qt提供了大量的事件响应函数,其中包括鼠标事件处理函数。鼠标事件处理函数的主要作用是根据鼠标操作执行相应的动作。

带你成为别人眼中的大佬! 1195

Qt扫盲-QMouseEvent 鼠标事件

当在QWidget窗口内的鼠标按钮被按下或释放,或者鼠标光标被移动时,就会发生鼠标事件。鼠标按下释放没有什么特殊的,但是鼠标移动事件比较特殊,只有当鼠标按钮被按下时,鼠标移动事件才会发生,除非使用 QWidget::setMouseTracking()函数去启用了鼠标跟踪。如果禁用了鼠标跟踪(默认),则只有在鼠标移动过程中至少按下一个鼠标按钮时,Widget才会接收鼠标移动事件。如果启用了鼠标跟踪,即使没有按下按钮,widget也会接收鼠标移动事件。

洪源兄 2964

Ubuntu安装pytorch3d的最便捷方法【原创】

Ubuntu安装pytorch3d的最便捷方法

qq_54900679的博客 2924

从零开始!Jupyter Notebook的安装教程(附带pip和Python的安装教程)

本篇文章创造性的以“授人以渔”的方式教大家如何安装Jupyter Notebook、pip和Python,以及对于Jupyter Notebook代码路径的基本设置。

保证安全,保证寿终正寝的博客 13万+

【Qt】处理鼠标事件

当在窗⼝中按下⿏标或者移动⿏标时,都会产⽣⿏标事件。

dab112的博客 1981

工业自动化中气动夹爪选型、调试与维护全流程实战解析

在工业自动化领域,气动执行元件是实现精准抓取与搬运的基础。其工作原理是通过压缩空气驱动气缸,转化为直线或旋转运动,从而控制夹爪的开合。这类技术因其结构简单、响应快速、成本低廉及维护方便,在自动化产线中具有极高的技术价值,是实现高效、可靠物料搬运的核心单元。其典型应用场景涵盖电子装配、汽车制造、食品包装等行业的上下料、分拣与定位工序。本文以工业自动化中常见的二指平行气动夹爪(常被工程师代号化为“Gripper-A”)为例,深入剖析其从硬件选型、气动系统集成到程序逻辑联锁的完整工程实践。内容聚焦于夹持力计算中惯

weixin_42629671的博客 366

QT QMouseEvent 鼠标事件

通常是重定义部件的鼠标事件处理函数来进行一些自定义的操作。 Protected: void mousePressEvent(QMouseEvent *event); //鼠标按下事件 void mouseReleaseEvent(QMouseEvent *event); //鼠标释放事件 void mouseDoubleCl...

心若十年的博客 1万+

HDMI接口协议

接口HDMI(High-Definition Multimedia Interface),新一代多媒体接口标准。即高清多媒体接口。它能够同时传输视频和音频,简化了设备的接口和连线;同时提供了更高的数据传输带宽,可以传输无压缩的数字音频及高分辨率视频信号。HDMI 1.0 版本于 2002 年发布,最高数据传输速度为 5Gbps;而2017 年发布的 HDMI 2.1 标准的理论带宽可达 48Gbps。1、能够同时传输视频和音频,简化了设备接口与连线。2、提供了更高的数据传输带宽,

weixin_42581439的博客 2594

Arduino-Pico:用Arduino生态开发树莓派RP2040双核与PIO实战

在嵌入式开发领域,微控制器编程是连接硬件与软件的核心技能。其原理在于通过编写代码直接控制处理器与外设,实现特定功能。掌握这项技术能极大提升开发效率,降低硬件操作门槛,广泛应用于物联网、智能硬件和自动化控制等场景。本文聚焦于如何利用Arduino这一广受欢迎的生态,来开发树莓派RP2040微控制器。RP2040以其双核Cortex-M0+架构和独特的可编程IO(PIO)硬件而著称,性能强大。通过第三方Arduino核心(arduino-pico),开发者可以沿用熟悉的Arduino语法和库,快速调用双核并行处

weixin_26905423的博客 381

Qt - 鼠标事件

欢迎转载,请注明出处:https://blog.youkuaiyun.com/qq_39453936?spm=1010.2135.3001.5343 原文链接: https://blog.youkuaiyun.com/qq_39453936/article/details/120720369 鼠标相关事件QMouseEvent的详细描述QMouseEvent 相关使用mousePressEventmousePressEvent QMouseEvent的详细描述 在小部件内按下或释放鼠标按钮或移动鼠标光标时,会发生鼠标事件。 只

佛系的小白 8434

BPMN-JS :修改节点“Change Type”事件类型

修改路径:node_modules\bpmn-js\lib\features\replace\ReplaceOptions.js。

TaylorY的博客 679

QT 事件系统之QMouseEvent鼠标事件

概述 在Qt中,鼠标事件被封装成.QMouseEvent对象,QMouseEvent中包含一些参数,用描述鼠标事件。 在QT中,鼠标事件包含:鼠标按键按下,鼠标按键释放,鼠标双击事件,鼠标移动事件。 分别由下面的event handler来处理: virtual void mousePressEvent(QMouseEvent *event); virtual void mouseReleaseE...

qqq1111e的博客 1万+

CAN轴控制流【6041,6040】

【代码】CAN轴控制流【6041,6040】

cfqq1989的博客 1783

innovus:streamOut gds中pg text带有冒号(:)解决办法

streamOut后查看layout,发现部分PG text后面加了冒号,比如VDD: / VSS:。当然,这个问题还有另一种解决办法,就是通过脚本给terminal打text再streamOut。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 1190

Qt鼠标事件

Qt事件主要包括鼠标事件和键盘事件两种,鼠标事件包括了鼠标的移动、按下、松开、单击和 双击等,Qt中关于鼠标的类是QMouseEvent而在Qt中我们想要实现鼠标事件只需要重写窗口的以下函数: voidmousePressEvent(QMouseEvent*e); 鼠标按下 voidmouseReleaseEvent(QMouseEvent*e); 鼠标释放 voidmouseMoveEvent(QMouseEvent*e); 鼠标移动 void...

weixin_42122527的博客 2633

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Qt中的鼠标事件

目标:使label控件支持鼠标的进入和离开事件的捕捉 在工程中添加c++类文件 MyLabel #ifndef MYLABEL_H #define MYLABEL_H #include "QLabel" class MyLabel : public QLabel { Q_OBJECT public: explicit MyLabel(QWidget *parent = nullptr); void enterEvent(QEvent *ev); //重载的鼠标进入事件 v

qq_41490873的博客 3515

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

qt鼠标事件

本文记载了一些鼠标事件,包括鼠标移动、点击、释放、双击、滚轮,以及在点击释放时左右键的判断;同时,鼠标事件在窗口内,只有在鼠标点击时,窗口才会捕捉到鼠标事件,这样,在鼠标移动事件里,就只有在鼠标点击后, 不松手,然后一直移动鼠标,才会触发移动事件,本文记载了一个函数,可以在窗口内持续捕捉鼠标事件,这样不用点击,也可以触发鼠标移动事件;

m0_67051449的博客 3722

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

QT之QLabel中鼠标常用事件

mylabel.cpp #include "mylabel.h" #include <QDebug> #include <QMouseEvent> MyLabel::MyLabel(QWidget *parent) : QLabel(parent) { //设置鼠标追踪 // setMouseTracking(true); } //鼠标进入事件 void...

杨杨子江的博客 3258
上一篇: Linux epoll模型
下一篇: 纠结的QList 排序
656-3
博客等级 码龄12年 30粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值