Event事件分发器
用于事件的分发
可以用事件分发器做拦截,从而不进入到后面的虚函数中,但是不建议
bool event(QEvent *e);
返回值 如果是true 代表用户处理这个事件,不向下进行分发
e->type()==中可选择进行拦截的类型
bool event ( QEvent * e) ;
bool MainWindow :: event ( QEvent * e)
{ if ( e-> type ( ) == QEvent:: MouseButtonPress) { QMouseEvent * ev = static_cast < QMouseEvent * > ( e) ; QString str = QString ( "事件分发函数中,鼠标按下 x= %1 y= %2" ) . arg ( ev-> x ( ) ) . arg ( ev-> y ( ) ) ; qDebug ( ) << str; return true ; } return QWidget :: event ( e) ;
}
事件过滤器:
通过事件过滤器,可以在程序分发到event事件之前再做一次高级拦截
使用:给控件安装事件过滤器;重写eventfilter事件
bool eventFilter ( QObject * o, QEvent * e) ;
bool MainWindow :: eventFilter ( QObject * o, QEvent * e)
{ if ( o== ui-> label_2) { if ( e-> type ( ) == QEvent:: MouseButtonPress) { QMouseEvent * ev = static_cast < QMouseEvent * > ( e) ; QString str = QString ( "事件过滤器中,鼠标按下 x= %1 y= %2" ) . arg ( ev-> x ( ) ) . arg ( ev-> y ( ) ) ; qDebug ( ) << str; return true ; } } return QWidget :: eventFilter ( o, e) ;
}