Qt- filtro de eventos

1. Introducción

Una vez que el componente de destino tiene un evento, primero se pasará al objeto de supervisión (filtro de eventos) para su procesamiento en lugar del controlador de eventos correspondiente al evento. Entonces podemos interceptar el incidente para procesarlo. Después de que el objeto de monitoreo intercepta los eventos del objeto de destino, llamará a su propia función eventFilter () para manejar estos eventos.

bool QObject::eventFilter ( QObject * object, QEvent * event );

Devuelve verdadero, lo que indica que el evento también se ha filtrado (procesado) y ya no necesita ser reenviado. Si
se devuelve falso, se reenviará al objeto normalmente.

Hay dos pasos a seguir:

  1. Llame a installEventFilter () en el objeto de destino para registrar el objeto de supervisión (filtro de eventos);
  2. Vuelva a escribir la función eventFilter () del objeto de supervisión para procesar los eventos del objeto de destino.

Dos ejemplos

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    
    
    ui->setupUi(this);
    ui->pushButton->installEventFilter(this);//按钮安装事件过滤器
}

MainWindow::~MainWindow()
{
    
    
    delete ui;
}
//重写
 bool MainWindow::eventFilter(QObject *object, QEvent *event)
 {
    
    
     if(object == ui->pushButton)
     {
    
    
         switch (event->type())
             {
    
    
                 case QEvent::MouseButtonPress:
                 {
    
    //获取鼠标按下事件,打印,或者做自己想做的
                     qDebug()<<"press Button"<<endl;
                     return true;
                }
             }
             return false;
     }
     //其它部件产生的事件则交给基类处理
    return QObject::eventFilter(object, event);
}

Archivo de cabecera

protected:
    bool eventFilter(QObject *object, QEvent *event);

Supongo que te gusta

Origin blog.csdn.net/GreedySnaker/article/details/114374191
Recomendado
Clasificación