qt鼠标事件

2023-10-31

一:qt的鼠标事件包含头文件 <QMouseEvent>

二:qt鼠标事件需要重写虚函数

(1):鼠标移动事件(需捕捉到鼠标后,才可以打印坐标,在QWidget内点击鼠标后,就可以捕捉到鼠标)

void mouseMoveEvent(QMouseEvent *event);
void Widget::mouseMoveEvent(QMouseEvent *event)
{
    QPoint p_ab = event->globalPos();//相对于整个桌面的位置
    QPoint p_re = event->pos();//相对于Widget窗口内的位置
    
    QString str1, str2;
    str1 = QString("%1 , %2").arg(p_ab.x()).arg(p_ab.y());//存放相对于整个桌面的x,y坐标
    str2 = QString("%1 , %2").arg(event->x()).arg(event->y());//存放相对于Widget的x,y坐标
    //str2 = QString("%1 , %2").arg(p_re.x()).arg(p_re.y());//存放相对于Widget的x,y坐标,与上面等价
    qDebug() << str1 << " | " << str2 << endl;
}

(2):持续捕捉鼠标事件(持续捕捉鼠标事件,不用按下鼠标,只要鼠标在QWidget内移动,就可以捕捉)

鼠标移动事件,只要移动鼠标,就会触发这个函数,其中,正常情况下,只有当鼠标在QWidget界面点击鼠标后,才会捕捉到鼠标的坐标,那如何实现,在不点击鼠标的情况下,也可以捕捉到鼠标移动事件呢?

代码如下:

//QWidget的构造函数
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    //添加如下代码
    this->setMouseTracking(true);//持续捕捉鼠标事件,不用按下鼠标也可以捕捉到;
}

(3):鼠标点击事件(左键点击,右键点击)

void mousePressEvent(QMouseEvent *event);
void Widget::mousePressEvent(QMouseEvent *event)
{
    if(event->button() & Qt::LeftButton)
    {
        qDebug() << "鼠标左键按下" << endl;
    }
    else if(event->button() & Qt::RightButton)
    {
        qDebug() << "鼠标右键按下" << endl;
    }
}

(4):鼠标释放事件(左键释放,右键释放)

void mouseReleaseEvent(QMouseEvent *event);
void Widget::mouseReleaseEvent(QMouseEvent *event)
{
    if(event->button() & Qt::LeftButton)
    {
        qDebug() << "鼠标左键释放" << endl;
    }
    else if(event->button() & Qt::RightButton)
    {
        qDebug() << "鼠标右键释放" << endl;
    }
}

(5):鼠标双击事件(左键双击,右键双击)

void mouseDoubleClickEvent(QMouseEvent *event);
void Widget::mouseDoubleClickEvent(QMouseEvent *event)
{
    if(event->button() & Qt::LeftButton)
    {
        qDebug() << "鼠标左键双击" << endl;
    }
    else if(event->button() & Qt::RightButton)
    {
        qDebug() << "鼠标右键双击" << endl;
    }
}

(6):滚轮事件(只涉及了鼠标滚轮的滚动,不涉及鼠标滚轮的按下)

void wheelEvent(QWheelEvent *event);
void Widget::wheelEvent(QWheelEvent *event)
{
    if(event->delta() > 0)
    {
        qDebug() << "滚轮远离使用者" << endl;
    }
    else if(event->delta() < 0)
    {
        qDebug() << "滚轮靠近使用者" << endl;
    }
}

三,鼠标与窗口(还未实验,需要考证)

(1):进入窗口区域事件(还未实验,需要考证)

比如在主窗口QWidget下有一个父窗口Lable,在鼠标进入Lable窗口时,就会触发此函数

void MyLabel::enterEvent(QEvent *)
{
    QString text=QString("<center><h1>Mouse enter</h1></center>");
    this->setText(text);
}

(2):离开窗口区域事件(还未实验,需要考证)

void MyLabel::leaveEvent(QEvent *){
    QString text=QString("<center><h1>Mouse leave</h1></center>");
    this->setText(text);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

qt鼠标事件 的相关文章

  • 在没有加载器的情况下实例化内联组件

    有没有办法实例化内联Component 即在同一文件中定义 而不使用Loader 我不太关心使用的性能影响Loader因为我要用很多东西污染我的文件Loader包装纸 我发现从 JavaScript 创建动态 QML 对象 http doc
  • QStyledItemDelegate 绘制自定义小部件失败

    在我的一个项目中 我使用的是QTableWidget为了显示一些复杂的计算结果 为了提高表格的可读性 我需要在单个表格单元格内显示两个对齐的值 后来我想通过使用颜色或箭头等来进一步自定义小部件 为此我源自QStyledItemDelegat
  • 第一次信号发射后自动断开

    我正在从文件加载网页 然后替换其中的一些 html self template web page QtWebKit QWebPage self template web page mainFrame load QtCore QUrl tem
  • 获取 QListView 中所有可见项目的简单方法

    我正在尝试使用 Qt Framework 开发一个图像库应用程序 应用程序从所选文件夹加载所有图像 并使用 QListView 控件显示这些图像 但现在我想通过仅加载用户可见的图像来减少内存消耗 由于没有直接函数来获取视图中的所有可见项目
  • Qt 为什么使用 QString::number() 而不是 QLocale().toString()?

    我正在开发的应用程序将在许多国家推出 并且需要支持他们的语言 我一直在回顾我的代码并替换以下每个实例 QString number and QString toDouble with QLocale toString and QLocale
  • Qt 嵌入式触摸屏 QMouseEvents 在收到 MouseButtonRelease 之前未收到

    我在带有触摸屏的小型 ARM 嵌入式 Linux 设备上使用 Qt 4 8 3 我的触摸屏配置了 tslib 并对其进行了校准 因此 etc 中有一个 pointcal 文件 我的触摸事件的位置工作得很好 但无论如何我都会在鼠标按下或鼠标释
  • 如何doxygen注释Qt属性?

    我想将 Doxygen 注释附加到我的 Q PROPERTY 例如 song h class Song public QObject Q OBJECT private Q PROPERTY QString title READ title
  • 如何在Android中使用QML - QWebView

    我想在 Android 中部署一个 YouTube 应用程序 但它只能在我的电脑上运行 在安卓上不起作用 它不加载任何视频 问题仅出在 QWebView 上 我使用了与此类似的代码 http doc qt io archives qt 5
  • 了解 Qt3D 创建的网格

    我创建了一个 Qt3D 网格 如下所示 Qt3DCore QEntity newEntity new Qt3DCore QEntity Qt3DExtras QConeMesh mesh new Qt3DExtras QConeMesh m
  • 无法运行 Qt 应用程序:找不到版本“Qt_5”

    我运行 Ubuntu 16 04 LTS 我的问题是我无法运行可以编译的 Qt5 应用程序 这是我尝试运行它时得到的结果 home user Desktop sconfig dist Release GNU Linux SCongif us
  • Qt 支持 Windows 蓝牙 API 吗?

    谁能告诉我 Qt 是否支持 Windows 蓝牙 API 如果是这样 您能否分享一些有关如何使用它的信息 自上次答复以来 这个问题的答案发生了一些变化 Qt 5 2 版为 Linux BlueZ 和 BlackBerry 设备实现了蓝牙 A
  • 通过单击内部小部件而不是标题栏来移动窗口

    在 Windows 中 当我创建 QMainWindow 时 我可以通过单击标题栏并拖动它来在屏幕上移动它 在我的应用程序中 我使用隐藏了标题栏setWindowFlags Qt CustomizeWindowHint 我正在尝试使用小部件
  • Qt - 如何使用 QNetworkAccessmanager 获取响应文本

    这是我的代码 Widget Widget manager new QNetworkAccessManager this connect manager SIGNAL finished QNetworkReply this SLOT repl
  • QByteArray 到整数

    正如您可能从标题中看出的那样 我在转换QByteArray为一个整数 QByteArray buffer server gt read 8192 QByteArray q size buffer mid 0 2 int size q siz
  • QT:模块“QtWebView”未安装

    我的操作系统是win10 QT版本是Qt5 7 mingw53 32 目标操作系统是win10 当我使用qmlscene执行qml文件时 发生了一些错误 qrc qml 3 模块 QtWebView 未安装 我的 qml 文件如下 impo
  • 使用 qbs 构建 qt 应用程序

    我想知道在 Linux 上使用 qbs 编译 构建和创建 Android Qt 应用程序的步骤 我拥有所有必要的工具 目前我可以使用 qmake 创建 apk Qbs 目前不支持构建 Qt Android 应用程序 Qbs v1 4 中引入
  • PyQt5 使动态小部件可点击并将参数传递给另一个函数

    我正在尝试制作动态小部件并使它们可点击 通过单击一个小部件 它应该将动态值传递给其他小部件 我尝试过 sender 和其他访问小部件的选项 但没有任何效果 所有小部件都从最后一个小部件发送信息 下面是代码 import sys from P
  • 如何在不声明 32 个插槽的情况下将 32 个按钮的 pressed() 信号连接到单个函数?

    我有一个小部件 里面有 32 个按钮 我需要将每个按钮的 Pressed 信号连接到一个插槽 以便调用一个函数 该函数的参数取决于我按下的按钮 现在我通过以 on QPushButtonName pressed 的形式添加 32 个插槽来做
  • Qt 多重继承和信号

    由于 QObject 我在 QT 中遇到了有关多重继承的问题 我知道很多人也有同样的问题 但我不知道该如何解决 class NavigatableItem public QObject Q OBJECT signals void desel
  • 如何为QTableView中的当前项目设置样式表

    When QTableView编辑控件对于发生编辑的当前项目可见 当窗口中没有活动的编辑控件时QTableView当前项目的样式使用QTableView selection background color 如何只为当前项目设置不同的样式

随机推荐

  • 应用程序无法正常启动(0x000007b)

    应用程序无法正常启动 0x000007b 请单击 确定 关闭应用程序 错误代码 0x000007b 是 Windows 操作系统中的一个常见错误代码 它通常与应用程序或操作系统文件的错误 损坏或不匹配相关联 这个错误代码可能会导致应用程序无
  • 正则表达式清理日志

    字段提取中正则表达式的使用 提取日志中的信息格式 lt 字段名称 gt 匹配具体信息的正则表达式 日志样例 lt 78 gt 2019 08 21T17 10 01 461970 08 00 localhost CROND root CMD
  • en结尾的单词_【第24集】en结尾的不规则动词变化

    这一集我们来看一下另一种不规则动词的变化 en 结尾 当然 这里en结尾 并不是说这个单词是en结尾 只是发音是en这样的不规则动词 那么这写不规则动词有哪些呢 我们来总结一下 tear 原形 tore 过去式 torn 过去分词 撕开 什
  • 如何在sublime Text3实时运行js代码?

    安装Node js https nodejs org en 为sublime text3添加编译系统 Tools gt Build System gt New Build System 在打开的界面中添加 cmd node file sel
  • UPnP协议学习

    UPnP架构定义了两种类型的设备 控制设备 controlled devices 和控制点 control points 控制设备扮演服务器的角色 响应控制点的请求 控制点和控制设备都能在各种平台包括个人电脑和嵌入式设备中实现 多个控制设备
  • C#8.0本质论第四章--操作符和控制流程

    C 8 0本质论第四章 操作符和控制流程 4 1操作符 有些操作符以符号的形式出现 例如 或者 等 而另一些操作符则为关键词 例如default和is 4 1 1一元正负操作符 一元正操作符 对值几乎没有影响 它在C 中是多余的 4 1 2
  • 组织机构代码输入测试用例_测试代码以用于过大的输入

    组织机构代码输入测试用例 在编写单元测试时 我们主要关注业务的正确性 我们将竭尽所能 开开心心地走在最前沿 我们有时会进行微基准测试并衡量吞吐量 但是经常遗漏的一个方面是当输入过大时我们的代码如何表现 我们测试了如何处理正常的输入文件 格式
  • MES系统介绍

    MES系统是什么 能解决企业管理中的什么问题 史上最全MES生产管理系统介绍 傲鹏MES供应商内部培训资料 错过了就没有了 一 MES系统介绍1 什么是MES系统 中文全称 制造执行系统 英文全称 manufacturing executi
  • 基于x86架构的CentOS7虚拟机通过qemu安装ARM架构CentOS7虚拟机_centos7 arm 网络配置

    原文连接 基于x86架构的CentOS7虚拟机通过qemu安装ARM架构CentOS7虚拟机 centos7 arm redrose2100的博客 CSDN博客 试过很多版本的在win10系统直接qemu安装arm版linux都失败了 也看
  • vm16安装windows系统

    安装win7系统 网上找到的iso均为ghost镜像 结果发现无法引导 找了个win10镜像可以引导 同时在创建一个cd加载win7的iso 进入win10的镜像PE 格式化硬盘 安装win7镜像 ok 同时 使用win7配置 安装win1
  • [创业之路-43] :复盘与自省 - 创业初感悟(冲动->纠结->忐忑)与“不贪、不赌、不悔”做人做事三原则的成形

    目录 创业冲动 冲动之后是纠结 选择后的忐忑 未来的应对之策 复盘后的体悟 做人做事三大基本原则1 不贪而心安 做人做事三大基本原则2 不赌而敬畏 做人做事三大基本原则3 不悔而未来 收获 创业冲动 虽然对创业进行了很多零散知识上的准备和多
  • 【WEB】关于网页设置 background-image: url死活显示不出来的解决办法

    图片或者背景显示不出来 大部分都是路径的问题 这是我图片所在的文件夹 相信很多有这个问题的小伙伴都是像我下面这样写的路径 那么背景图是不会显示出来的 解决办法如下图 原因是 在img的src中 是以当前html网页做相对文件 来设置引入图片
  • 全网最详细Postman接口测试使用教程(实战干G货)

    目录 导读 一 前言 二 接口测试 三 抓包 四 postman构造请求 五 其他的登录鉴权方式 六 总结 一 前言 测试行业现在越来越卷 不会点接口测试好像简历都已经拿不出手了 但很多小伙伴都会头疼 接口测试应该怎么入门 那么多的接口测试
  • vue axios三层封装

    utils文件下创建request js文件 第一层封装 引入axios文件 import axios from axios import qs from qs 声明公共的地址 axios defaults baseURL 设置超时 axi
  • 使用Python进行基于属性的测试

    When you write unit tests it s hard to find the right test cases You want to be certain that you covered all the interes
  • Acm Club 1326:算法2-8~2-11:链表的基本操作

    题目描述 链表是数据结构中一种最基本的数据结构 它是用链式存储结构实现的线性表 它较顺序表而言在插入和删除时不必移动其后的元素 现在给你一些整数 然后会频繁地插入和删除其中的某些元素 会在其中某些时候让你查找某个元素或者输出当前链表中所有的
  • 基于JT/T808协议、JT/T809协议、JT/T1078协议、苏标主动安全的车联网平台架构方案

    JT808是定位协议 通讯协议 基础协议 其他协议基于该协议进行扩展 JT809是转发协议 监管协议 第三方平台通过809向808进行数据获取与事件下发 JT1078是多媒体监控协议 视频 音频 对讲可以通过809扩展实现上级也可以多媒体监
  • Android 关于微信原生登录和友盟第三方微信登录来获取code那些坑(40029问题)

    如果你恰好集成了微信原生登录与友盟三方登录 那么可以继续往下看了 问题描述 本来在APP端使用openid就可以了的 结果未想到 后台要我们传一个Code过去 就是微信里面的Resp Error code这个 code 友盟登录里是直接获取
  • java 线程:概念与原理

    本文转载至 http lavasoft blog 51cto com 62575 99150 一 操作系统中线程和进程的概念 现在的操作系统是多任务操作系统 多线程是实现多任务的一种方式 进程是指一个内存中运行的应用程序 每个进程都有自己独
  • qt鼠标事件

    一 qt的鼠标事件包含头文件