bool MyLabel::event(QEvent* e)
{
//鼠标左键按下,拦截
if(e->type() == QEvent::MouseButtonPress)
{
QMouseEvent* ev = static_cast<QMouseEvent*>(e);
QString str = QString("Event函数中,鼠标按下了 x = %1 y = %2").\
arg(ev->x()).arg(ev->y());
qDebug() << str;
return true;
}
//其它事件交给父类处理
return QLabel::event(e);
}
这就是多态啊,父类指针可以指向子类对象,也就是理解成父类指针可以保存子类对象的数据。只是在语法上需要父类子类转换。至于这几种转换,你可看看相关的博客。https://blog.csdn.net/wildand/article/details/90049606?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-90049606-blog-46624693.pc_relevant_paycolumn_v3&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-90049606-blog-46624693.pc_relevant_paycolumn_v3&utm_relevant_index=1
event函数这样的设计是常见的,函数参数为父类,即这个函数可以操作所有继承于这个父类的子类,。
此时这个event函数就可以操作,鼠标事件、键盘事件、屏幕事件等等继承于QEvent的事件类型。