【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

相关推荐
清醒的兰39 分钟前
Qt 基于TCP套接字编程
网络·qt·tcp
爱喝茶的小茶42 分钟前
周赛98补题
开发语言·c++·算法
OpenC++1 小时前
【C++】备忘录模式
c++·设计模式·备忘录模式
小庞在加油2 小时前
《dlib库中的聚类》算法详解:从原理到实践
c++·算法·机器学习·数据挖掘·聚类
ComputerInBook2 小时前
C++ 标准模板库算法之 transform 用法
开发语言·c++·算法·transform算法
2301_803554525 小时前
c++中类的前置声明
java·开发语言·c++
LyaJpunov9 天前
深入理解 C++ volatile 与 atomic:五大用法解析 + 六大高频考点
c++·面试·volatile·atomic
mahuifa9 天前
PySide环境配置及工具使用
python·qt·环境配置·开发经验·pyside
小灰灰搞电子9 天前
Qt PyQt与PySide技术-C++库的Python绑定
c++·qt·pyqt
时空自由民.9 天前
C++ 不同线程之间传值
开发语言·c++·算法