【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

相关推荐
apocelipes1 天前
常用编程语言和库的正则表达式性能对比
c语言·c++·python·性能优化·golang·开发工具和环境
郝学胜_神的一滴2 天前
CMake 034:生成器表达式:解耦构建时序、精简分支逻辑的终极利器
c++·cmake
见过夏天3 天前
C++ 基础入门完全指南
c++
用户805533698034 天前
不止三件套:QObject 属性系统全关键字与运行时反射!
c++·qt
xcyxiner4 天前
DicomViewer (vcpkg Windows和ubuntu编译)7
qt
BadBadBad__AK5 天前
线段树维护区间 k 次方和
c++·数学·算法·stl
卷无止境5 天前
Eigen 库如何借助 OpenMP 加速计算
c++·后端
卷无止境5 天前
OpenMPI、MPICH 与 OpenMP:关系、核心概念与架构全解
c++·后端
郝学胜_神的一滴6 天前
CMake 30:循环语法全解|foreach_while双循环精讲、迭代技巧与实战避坑指南
c++·cmake
卷无止境8 天前
C++ 的Eigen 库全解析
c++