Day04. 事件。
QApplication类:
while(GetMessage(msg)) {}
↓
窗口:事件分发器 event()
↓
mouseEvent、mousePress、timer、 keyPress
1.event函数。事件分发器
事件分发器作用:过滤事件、虚函数-实现某个功能。
protected:
bool event(QEvent *e);
// .cpp复写方法
bool MyLabel::event(QEvent e)
{
//返回true,代表事件被处理过了,不继续向下分发。
//false,事件没有被处理,会继续向下分发
/switch(e->type())
{
case QEvent::MouseMove:
mouseMoveEvent(e);
break;
case QEvent::Timer:
timerEvent(e);
break;
}*/
//过滤定时器事件
if(e->type == QEvent::Timer) return true;
return QLabel::event(e); //让父类执行默认的处理
}
2.事件过滤器 eventFilter
事件进入窗口之前被拦截,eventFilter
1.需要过滤窗口的事件,需要给该窗口安装事件过滤器。事件进入不到该窗口。
2.需要在事件过滤器函数中,处理该事件。
在事件进入窗口之前,拦截事件。
函数:bool eventFilter(QObject *obj, QEvent *ev)
//widget.h
class Widget : public QWidget
{
protected:
bool eventFilter(QObject *obj, QEvent *ev);
private:
Ui::Widget *ui;
}
//widget.cpp
Widget::Widget(QWidget *parent) :QWidget,
ui(new Ui::Widget)
{
ui->setupUi(this);
//给MyLabel安装事件过滤器,参数:谁来过滤label的事件。
ui->mylabel->installEventFilter(this);
}
bool Widget::eventFilter(QObject *obj, QEvent *ev)
{
// 判断对象,避免多个label都安装了事件过滤器。
if(((QLabel*)obj) == ui->mylabel) {
//过滤事件
if(e->type() == QEvent::MouseMove) {
ui->mylabel->setText("++++++++++++");
return true;
}
}
// 执行默认处理
return QWidget::eventFilter(obj, e);
}













网友评论