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

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

文章目录

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

I - 实现自定义控件

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

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

cpp 复制代码
#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 接口实现缩放

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);
}

II - 完整代码

TextEdit.h

cpp 复制代码
#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

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

相关推荐
万法若空5 分钟前
ANSI转义码详解
linux·c++
南境十里·墨染春水29 分钟前
C++笔记 STL——vector
开发语言·c++·笔记
故事和你911 小时前
洛谷-算法2-2-常见优化技巧3
开发语言·数据结构·c++·算法·深度优先·动态规划·图论
charlie1145141911 小时前
通用GUI编程技术——图形渲染实战(三十七)——D3D11初始化与SwapChain:从零搭建GPU渲染框架
开发语言·c++·3d·图形渲染
菜鸟555551 小时前
2025江西省CCPC省赛暨全国邀请赛(南昌)
数据结构·c++·算法·acm·思维·ccpc·xcpc
charlie1145141911 小时前
通用GUI编程技术——图形渲染实战(三十六)——Constant Buffer与数据传递:CPU-GPU通信通道
开发语言·c++·windows·c·图形渲染·win32
paeamecium1 小时前
【PAT甲级真题】- Table Tennis (30)
c++·pat考试·pat
南境十里·墨染春水1 小时前
C++笔记 STL lterator迭代器
开发语言·c++·笔记
6Hzlia1 小时前
【Hot 100 刷题计划】 LeetCode 21. 合并两个有序链表 | C++ 经典迭代与 Dummy 技巧
c++·leetcode·链表
汉克老师1 小时前
GESP2023年6月认证C++三级( 第三部分编程题(2、密码合规检测))
c++·字符串·gesp三级·gesp3级