【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