当前位置: 首页 > news >正文

【Qt】实现 Ctrl + 鼠标滚轮 缩放文本功能

【Qt】实现 Ctrl + 鼠标滚轮 缩放文本功能

文章目录

    • I - 实现自定义控件
    • II - 完整代码
    • III - 参考链接

I - 实现自定义控件

主要原理 继承 QTextEdit 或者 QPlainTextEdit 类,重写滚轮事件 wheelEvent, QTextEdit 和 QPlainTextEdit 中均包含此函数

头文件 TextEdit.h ,自定义类 TextEdit 继承 QTextEdit (或 QPlainTextEdit)

#include <QTextEdit>
// 或 #include <QPlainTextEdit>
#include <QWheelEvent>class TextEdit : public QTextEdit
// 或 class TextEdit : public QPlainTextEdit
{Q_OBJECT
public:explicit TextEdit(QWidget* parent = nullptr);protected:void wheelEvent(QWheelEvent *e) override; //滚轮事件// 添加 override 编译时检查是否重写父类函数,防止敲错}

源文件 TextEdit.cpp
重写 wheelEvent 函数,调用父类的 zoomIn 和 zoomOut 接口实现缩放

#include <QApplication>
#include "TextEdit.h"TextEdit(QWidget* parent) : QTextEdit(parent)
// 或 TextEdit(QWidget* parent) : QPlainTextEdit(parent)
{
}void TextEdit::wheelEvent(QWheelEvent *e)
{// 检查按键 Ctrl 是否按下if (Qt::ControlModifier == QApplication::keyboardModifiers()){if (e->delta() > 0) // 鼠标滚轮向上滚动{zoomIn(); // 文本放大}else{zoomOut(); // 文本缩小}}// 调用父类事件函数 保证鼠标滚轮查看文本功能正常QTextEdit::wheelEvent(e);// 或 QPlainTextEdit::wheelEvent(e);
}

II - 完整代码

TextEdit.h

#include <QTextEdit>
// 或 #include <QPlainTextEdit>
#include <QWheelEvent>class TextEdit : public QTextEdit
// 或 class TextEdit : public QPlainTextEdit
{Q_OBJECT
public:explicit TextEdit(QWidget* parent = nullptr);protected:void wheelEvent(QWheelEvent *e) override; //滚轮事件// 添加 override 编译时检查是否重写父类函数,防止敲错}

TextEdit.cpp

#include <QApplication>
#include "TextEdit.h"TextEdit(QWidget* parent) : QTextEdit(parent)
// 或 TextEdit(QWidget* parent) : QPlainTextEdit(parent)
{
}void TextEdit::wheelEvent(QWheelEvent *e)
{// 检查按键 Ctrl 是否按下if (Qt::ControlModifier == QApplication::keyboardModifiers()){if (e->delta() > 0) // 鼠标滚轮向上滚动{zoomIn(); // 文本放大}else{zoomOut(); // 文本缩小}}// 调用父类事件函数,保证鼠标滚轮查看文本功能正常QTextEdit::wheelEvent(e);// 或 QPlainTextEdit::wheelEvent(e);
}

III - 参考链接

https://blog.csdn.net/weixin_36323170/article/details/119532007

相关文章:

  • 小程序性能优化
  • R语言【base】——scan():读取数据值
  • Android进阶(二十九) 走近 IntentFilter
  • C语言中,设置Linux中系统时间
  • R语言数据分析(五)
  • hbase最新版本配置属性
  • 十大基础排序算法
  • win系统下安装php8.3版本并配置环境变量的详细教程
  • WPF中样式
  • Kubernetes Prometheus 系列|Prometheus介绍和使用|Prometheus+Grafana集成
  • 2024.2.22
  • RSA加密,解密,加签及验签
  • 解决IntelliJ IDEA 2023版本创建Spring项目时Java只能选择17或21的问题
  • 基于java Springboot实现教务管理系统
  • Window部署SkyWalking
  • 2017届校招提前批面试回顾
  • - C#编程大幅提高OUTLOOK的邮件搜索能力!
  • C++类中的特殊成员函数
  • HTTP中GET与POST的区别 99%的错误认识
  • JavaScript HTML DOM
  • JavaScript 基本功--面试宝典
  • JSDuck 与 AngularJS 融合技巧
  • Magento 1.x 中文订单打印乱码
  • python 装饰器(一)
  • React Transition Group -- Transition 组件
  • Sass 快速入门教程
  • V4L2视频输入框架概述
  • webgl (原生)基础入门指南【一】
  • 从零开始学习部署
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 前嗅ForeSpider教程:创建模板
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 使用docker-compose进行多节点部署
  • 网络应用优化——时延与带宽
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 一个SAP顾问在美国的这些年
  • 正则表达式
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • #android不同版本废弃api,新api。
  • #QT(TCP网络编程-服务端)
  • $.proxy和$.extend
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (非本人原创)我们工作到底是为了什么?​——HP大中华区总裁孙振耀退休感言(r4笔记第60天)...
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (附源码)ssm码农论坛 毕业设计 231126
  • (学习日记)2024.02.29:UCOSIII第二节
  • (已解决)什么是vue导航守卫
  • (转)nsfocus-绿盟科技笔试题目
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • .net Application的目录
  • .net MVC中使用angularJs刷新页面数据列表
  • .NET 的程序集加载上下文
  • .NET/C# 判断某个类是否是泛型类型或泛型接口的子类型