QT通过事件过滤器eventFilter实现监控某控件的键盘事件
选中某个控件后,鼠标滚轮的动作,键盘上下键的按键操作
这里实现滚轮上下,放大缩小编辑框的字体
向上向下键实现spinBox旋转框的值增减
#ifndef MAINWINDOW6_8_H
#define MAINWINDOW6_8_H
#include
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow6_8; }
QT_END_NAMESPACE
class MainWindow6_8 : public QWidget
{
Q_OBJECT
public:
MainWindow6_8(QWidget *parent = nullptr);
~MainWindow6_8();
bool eventFilter(QObject *obj,QEvent *event);
private:
Ui::MainWindow6_8 *ui;
};
#endif // MAINWINDOW6_8_H
#include "mainwindow6_8.h"
#include "ui_mainwindow6_8.h"
//事件过滤器与事件的发送
#include
#include
MainWindow6_8::MainWindow6_8(QWidget *parent)
: QWidget(parent)
, ui(new Ui::MainWindow6_8)
{
ui->setupUi(this);
//在编辑器部件安装事件过滤器
ui->textEdit->installEventFilter(this);
ui->spinBox->installEventFilter(this);
//按向下键-spinbox数值加1
QKeyEvent my_event(QEvent::KeyPress,Qt::Key_Up,Qt::NoModifier);
qApp->sendEvent(ui->spinBox,&my_event);//qApp是QApplication对象的全局指针,每一个应用程序只能使用一个QApplication对象
//等价于QApplication::sendEvent(ui->spinBox,&my_event);//
}
MainWindow6_8::~MainWindow6_8()
{
delete ui;
}
bool MainWindow6_8::eventFilter(QObject *obj, QEvent *event)
{
if(obj==ui->textEdit)
{
if(event->type()==QEvent::Wheel)
{
//将event强制转换为发生的事件的类型
QWheelEvent *wheel_event=static_cast(event);
if(wheel_event->delta()>0)
{
ui->textEdit->zoomIn();//放大
}
else
{
ui->textEdit->zoomOut();
}
return true;//该事件已经被处理了
}
else
{
return false;//如果是其它事件,可以进行进一步的处理
}
}
else if(obj==ui->spinBox)
{
if(event->type()==QEvent::KeyPress)
{
QKeyEvent *key_event=static_cast(event);
if(key_event->key()==Qt::Key_Space)//判断是按下空格
{
ui->spinBox->setValue(0);
return true;
}
else
{
return false;
}
}
else
{
return false;
}
}
else
{
return QWidget::eventFilter(obj,event);
}
}