解决关于使用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);
}

猜你喜欢

转载自blog.csdn.net/m0_74091159/article/details/142964798