解决关于使用dynamic_cast而导致的程序崩溃的现象
注意看这段代码:
bool KuGouApp::event(QEvent *event) {if(QEvent::HoverMove == event->type())//鼠标移动{const auto ev = dynamic_cast<QMouseEvent*>(event);this->mouseMoveEvent(ev);}return QWidget::event(event);
}
乍看之下没有问题,基类转派生类用dynamic_cast没毛病。那问题就大了。。。
使用dynamic_cast强制转换的前提条件是对于已知该基类确确实实指向该派生类类型,否则运行时会崩溃!!!而QMouseEvent只是多个派生类中的一个。。。
应该改为:
bool KuGouApp::event(QEvent *event) {if(QEvent::HoverMove == event->type())//鼠标移动{const auto ev = dynamic_cast<QMouseEvent*>(event);if(ev)this->mouseMoveEvent(ev);}return QWidget::event(event);
}
或者:
bool KuGouApp::event(QEvent *event) {if(QEvent::HoverMove == event->type())//鼠标移动{const auto ev = dynamic_cast<QMouseEvent*>(event);if(ev)this->mouseMoveEvent(ev);}return QWidget::event(event);
}