qt QWheelEvent详解

1、概述

QWheelEvent是Qt框架中用于处理鼠标滚轮事件的一个类。当用户滚动鼠标滚轮时,Qt会生成一个QWheelEvent事件,并将其发送到相应的窗口或控件。开发者可以通过重载窗口或控件的wheelEvent()方法来响应这个事件,并执行相应的操作,如滚动视图、缩放内容等。

2、重要方法

QWheelEvent类提供了一些方法来获取事件的相关信息:

  • angleDelta():返回滚轮滚动的角度差。这个值是一个QPoint对象,其x()和y()分量分别表示水平和垂直滚动的角度差。通常,垂直滚动的角度差更为常用,而水平滚动的角度差可能在一些特定的应用程序中才有用。
  • pixelDelta():返回滚轮滚动的像素差。这个值也是一个QPoint对象,其x()和y()分量分别表示水平和垂直滚动的像素差。与angleDelta()相比,pixelDelta()提供了更直接的滚动距离信息,但可能不如angleDelta()跨平台和跨设备的一致性高。
  • globalPos():返回滚轮事件的全局位置,即滚轮事件在屏幕上的坐标。
  • pos():返回滚轮事件的相对位置,即滚轮事件相对于接收事件窗口或控件的坐标。
  • buttons():返回滚轮事件发生时按下的鼠标按钮。这可以用于区分简单的滚轮滚动和结合了鼠标按钮按下的复杂操作。
  • modifiers():返回滚轮事件发生时按下的键盘修饰键(如Shift、Ctrl、Alt等)。

3、重要信号

与QResizeEvent类似,QWheelEvent本身并不提供信号。Qt的事件处理机制和信号/槽机制是两种独立的通信方式。QWheelEvent通过事件处理机制传递给相应的窗口或控件,开发者需要在这些对象中重载wheelEvent()方法来处理这个事件。

如果需要在滚轮事件后通知其他对象或执行某些操作,可以在wheelEvent()方法内部使用信号/槽机制或其他通信方式。然而,通常的做法是在wheelEvent()方法中直接处理滚轮事件,因为它是一个低级别的、需要即时响应的用户交互。

#include <QWidget>  
#include <QWheelEvent>  
#include <QLabel>  
#include <QVBoxLayout>  class MyWidget : public QWidget {  Q_OBJECT  public:  MyWidget(QWidget *parent = nullptr) : QWidget(parent) {  QVBoxLayout *layout = new QVBoxLayout(this);  scrollLabel = new QLabel("Scroll to change text", this);  layout->addWidget(scrollLabel);  setLayout(layout);  // 初始化文本滚动位置  scrollPosition = 0;  }  protected:  void wheelEvent(QWheelEvent *event) override {  // 获取滚轮滚动的像素差  int pixelsScrolled = event->angleDelta().y();  // 根据滚动的方向增加或减少滚动位置  if (pixelsScrolled > 0) {  scrollPosition++;  } else if (pixelsScrolled < 0) {  scrollPosition--;  }  // 更新标签文本以显示滚动位置  scrollLabel->setText(QString("Scroll position: %1").arg(scrollPosition));  // 调用基类的wheelEvent方法(虽然在这个例子中不是必需的)  QWidget::wheelEvent(event);  }  private:  QLabel *scrollLabel;  int scrollPosition; // 用于跟踪滚动位置的变量  
};  // 在主程序中使用MyWidget  
#include <QApplication>  int main(int argc, char *argv[]) {  QApplication app(argc, argv);  MyWidget window;  window.show();  return app.exec();  
}

觉得有帮助的话,打赏一下呗。。

           

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/8163.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

如何训练最懂您企业的AI助理?

随着人工智能技术的蓬勃发展&#xff0c;企业级AI助理已成为提升工作效率、优化客户服务体验的重要利器。这些智慧化的系统&#xff0c;通过模拟人类的认知功能&#xff0c;能够轻松应对复杂的数据分析、自动化繁琐的日常任务&#xff0c;甚至为企业决策提供有力支持。拥有一款…

2024网鼎杯web1+re2 wp

这两道题属于比较简单的&#xff0c;顺道说一下&#xff0c;今年的题有点抽象&#xff0c;web不是misc&#xff0c;re不是web的&#xff0c;也有可能时代在进步&#xff0c;现在要求全栈✌了吧 web1 最开始被强网的小浣熊带偏思路了&#xff0c;进来疯狂找sql注入&#xff0c…

【Android 系统中使用CallStack类来追踪获取和操作调用栈信息】

Android系统CallStack类的使用 定义使用方法使用场景注意事项应用举例 定义 在 Android 系统中&#xff0c;CallStack 类是一个用于获取和操作调用栈信息的工具类。这个类通常用于调试和日志记录&#xff0c;以帮助开发者了解函数调用的顺序和位置。以下是您提供的代码片段的解…

Vue 组件通信-自定义事件(七)

一、组件自定事件概念 自己定义的事件&#xff0c;包含事件名&#xff0c;事件回调等&#xff0c;定义好之后去给组件使用。也是一种组件的通信方式&#xff0c;适用于子组件传递给父组件。 二、 组件自定义事件实现子传父 1、在父组件中给子组件绑定一个自定义事件 在子组件标…

解决Qt Creator调试“warning: GDB: Failed to set controlling terminal“

本文档详细介绍了在Qt环境中遇到GDB提示Failed to set controlling terminal错误时的解决方案&#xff0c;步骤包括勾选Run in Terminal选项。适合开发者在调试过程中遇到此类问题时参考。 &"warning: GDB: Failed to set controlling terminal: \345\257\271\350\25…

nginx 部署2个相同的vue

起因&#xff1a; 最近遇到一个问题&#xff0c;在前端用nginx 部署 vue&#xff0c; 发现如果前端有改动&#xff0c;如果不适用热更新&#xff0c;而是直接复制项目过去&#xff0c;会404 因此想到用nginx 负载两套相同vue项目&#xff0c;然后一个个复制vue项目就可以了。…

城镇保障性住房管理:SpringBoot技术探索

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原理…

ssm075学生信息管理系统+jsp(论文+源码)_kaic

毕 业 设 计&#xff08;论 文&#xff09; 学生信息管理系统设计与实现 摘 要 传统办法管理学生信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff…

Linux学习笔记之运行级别和找回root密码

运行级别 运行级别介绍 0&#xff1a;关机 1&#xff1a;单用户&#xff08;找回丢失密码&#xff09; 2&#xff1a;多用户状态没有网络服务&#xff08;基本不用&#xff09; 3&#xff1a;多用户状态有网络服务&#xff08;常用&#xff0c;Xshell就是级别3&#xff09; 4&…

连接到Oracle数据库

使用SQL * Plus连接Oracle数据库服务器 SQL * Plus 是交互式查询工具&#xff0c;我们在安装 Oracle 数据库服务器或客户端时会自动安装。SQL * Plus 有一个命令行界面&#xff0c;允许您连接到 Oracle 数据库服务器并交互执行语句。 注意&#xff1a;如果有使用过 MySQL 或 P…

vue3记录(第一版)

vue2与vue3的区别 vue2属于选项式API,vue3属于组合式API setup概述 setup是vue3中一个新的配置项,值是一个函数,组件中所用到的数据,方法,计算属性,监视等等,均配置在setup中 vue3中的setup和vue2的data,methods之间有什么关系呢? 因为setup比data解析的早,所以在data中可以…

基于SpringBoot的城镇保障性住房管理策略

3系统分析 3.1可行性分析 通过对本城镇保障性住房管理系统实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本城镇保障性住房管理系统采用SSM框架&#xff0c;JA…

海南华志亿星电子商务有限公司赋能抖音商家成长

在当今瞬息万变的电商时代&#xff0c;抖音凭借其短视频与直播电商的独特模式&#xff0c;迅速崛起并引领潮流。在这场电商变革中&#xff0c;海南华志亿星电子商务有限公司以其卓越的服务质量和创新的运营模式&#xff0c;在抖音电商领域大放异彩&#xff0c;成为众多商家的首…

UnityAssetsBundle字体优化解决方案

Unity开发某个项目&#xff0c;打包后的apk包体已经高达1.25G了&#xff0c;这是非常离谱的。为了不影响用户体验&#xff0c;需要将apk包体缩小。因为项目本身不包含很多模型以及其他大型资源&#xff0c;排除法将AB包删除&#xff0c;发现app本身就100多M。 由此可以锁定是AB…

vxe-table 控制行拖拽按钮的权限控制,实现行拖拽后的二次确认

vxe-table 控制行拖拽按钮的权限控制&#xff0c;实现行拖拽后的二次确认 官网文档&#xff1a;https://vxetable.cn 当我们使用行拖拽排序时&#xff0c;由于需求的原因&#xff0c;可能需要控制特定的行不允许拖动以及拖动后增加二次确认提示框&#xff0c;最后再进行保存。…

【Linux】信号三部曲——产生、保存、处理

信号 1. 信号的概念2. 进程如何看待信号3. 信号的产生3.1. kill命令3.2. 终端按键3.2.1. 核心转储core dump3.2.2. OS如何知道键盘在输入数据 3.3. 系统调用3.3.1. kill3.3.2. raise3.3.3. abort 3.4. 软件条件3.4.1. SIGPIPE信号3.4.2. SIGALRM信号 3.5. 硬件异常3.5.1. 除零异…

移植 AWTK 到 纯血鸿蒙 (HarmonyOS NEXT) 系统 (9) - 编译现有的AWTK应用程序

AWTK 应用程序开发完成后&#xff0c;在配置文件中添加 harmonyos 的选项&#xff0c;通过create_project.py脚本即可生成 DevEco Studio的工程。 安装开发环境 DevEco Studio HarmonyOS 的开发工具。 Python 运行环境。 git 源码管理工具。 下载 awtk 和 awtk-harmonyos…

【推荐】iptables学习宝典

链接&#xff1a; IPtables-朱双印博客 学习iptables的抗鼎之作&#xff0c;推荐。

python+pptx:(三)添加统计图、删除指定页

目录 统计图 删除PPT页 from pptx import Presentation from pptx.util import Cm, Inches, Mm, Pt from pptx.dml.color import RGBColor from pptx.chart.data import ChartData from pptx.enum.chart import XL_CHART_TYPE, XL_LABEL_POSITION, XL_DATA_LABEL_POSITIONfil…

react 修改默认样式

.but :global(.ant-btn ) {color:red !important;font-size: 30px !important;} //在外面套一层 <div className{styles[but]}><Button type"primary" >Primary Button</Button> </div> import styles from ./index.less;