您当前的位置: 首页 >  qt

txwtech

暂无认证

  • 2浏览

    0关注

    813博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

QT通过事件过滤器eventFilter实现监控某控件的键盘事件

txwtech 发布时间:2022-09-12 21:44:14 ,浏览量:2

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);
     }

}

关注
打赏
1665060526
查看更多评论
立即登录/注册

微信扫码登录

0.0383s