注意看这段代码:
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);
}