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

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

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

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-23 17:06:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-23 17:06:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-02-23 17:06:01       82 阅读
  4. Python语言-面向对象

    2024-02-23 17:06:01       91 阅读

热门阅读

  1. vue实现列表自动滚动效果

    2024-02-23 17:06:01       59 阅读
  2. flink-cdc使用小结

    2024-02-23 17:06:01       52 阅读
  3. 删除文件中的注释(C语言)

    2024-02-23 17:06:01       53 阅读
  4. 【Android 协程常见用法】

    2024-02-23 17:06:01       62 阅读
  5. Jmeter 学习目录(0)

    2024-02-23 17:06:01       56 阅读
  6. PyTorch中保存模型的两种方式

    2024-02-23 17:06:01       54 阅读
  7. Cpython和Jpython区别

    2024-02-23 17:06:01       52 阅读
  8. 中国工业废水处理行业报告

    2024-02-23 17:06:01       42 阅读
  9. Asp.Net web 文件服務快速搭建

    2024-02-23 17:06:01       48 阅读