【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

相关推荐
秋田君1 小时前
QT_QFontDialog类字体对话框
开发语言·qt
拳里剑气4 小时前
C++算法:多源BFS
c++·算法·宽度优先·多源bfs
ysa0510305 小时前
【板子】短序列dp(换成维护更小常数维度的dp)
c++·笔记·算法·板子
aramae7 小时前
C++ IO流完全指南:从C标准库到C++流式编程
服务器·c语言·开发语言·c++·后端
_wyt0017 小时前
c++里的族谱:树
c++·
@三十一Y8 小时前
C++:AVL树实现
c++
haolin123.9 小时前
类和对象(上)
开发语言·c++
ShineWinsu9 小时前
对于Linux:传输层协议UDP原理的解析
linux·c++·面试·udp·协议·传输层·计算机系统
LingzhiPi9 小时前
零知派ESP32--AS5600磁吸旋钮音量控制器
c++·单片机·嵌入式硬件
小保CPP9 小时前
OpenCV C++车型识别1-图像预处理
c++·人工智能·opencv·计算机视觉