qt QWheelEvent详解

news/2024/11/5 20:15:08 标签: qt
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.niftyadmin.cn/n/5739825.html

相关文章

leetcode 382.链表随机结点

1.题目要求: 2.题目代码: /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) : val(x)…

python代码获取zabbix上机器磁盘使用率

1.需要先给机器打上标记os_type: Linux或者os_type: Windows 2.代码请求获取数据&#xff1a; 先装一下相关的数据包 pip install pyzabbix from pyzabbix import ZabbixAPI import requests import urllib3 import concurrent.futuresclass ZabbixInfo():def __init__(self…

云账户:电商平台的财务管家

在电子商务蓬勃发展的今天&#xff0c;电商平台作为连接商家与消费者的桥梁&#xff0c;承担着繁重的资金流转任务。如何高效、合规地处理交易资金&#xff0c;成为电商平台提升竞争力、优化用户体验的关键。云账户分账系统的出现&#xff0c;为电商平台提供了强大的资金流转解…

【Spring】Spring的简单创建和使用

前言 Spring Bean 可以通过两种主要方式定义&#xff1a;基于 XML 配置文件和基于注解。今天我们讲解基于 XML 配置文件‌来定义 Bean &#xff0c;在 XML 配置文件中&#xff0c;使用 <bean> 元素定义 Bean&#xff0c;描述 Bean 的创建、配置和依赖关系&#xff0c;并存…

基于VsCode platformio的stm32开发环境搭建

背景 VsCode作为当下流行的编辑器&#xff0c;且不单单是一个编辑器里面集成了很多插件&#xff0c;使用这些插件可以完成很多功能。 STM32开发环境除了KEIL与IAR&#xff0c;其实还有很多其他的开方方式&#xff0c;ST官方提供了很多的开发软件&#xff0c;基于Eclipse也可以…

Docker LLama-Factory vLLM 快速部署Meta-Llama-3.1-70B-Instruct

Dockerfile: FROM kevinchina/deeplearning:llamafactory20241027# 设置工作目录 WORKDIR /app# 暴露端口 EXPOSE 8000 EXPOSE 7860# 使用 JSON 格式的 ENTRYPOINT,指定要执行的命令 ENTRYPOINT ["vllm", "serve", "/data/xiedong/LLM-Research/Me…

2024年10月第4个交易周收盘总结(10月收盘)

计划自己的交易&#xff0c;交易自己的计划! 跟随市场而情绪波动&#xff0c;最终一定会导向失败&#xff01;连续、平稳、冷静地惯彻交易计划&#xff0c;比什么都重要&#xff01; 交易本身是极其简单和清楚的&#xff0c;让事情变复杂的原因不是行情走势和交易本身&#x…

深入解析:人工智能与机器学习

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 深入解析&#xff1a;人工智能与机器学习 深入解析&#xff1a;人工智能与机器学习 深入解析&#xff1a;人工智能与机器学习 人…