参考资料:https://www.cnblogs.com/chenyangchun/p/6795923.html
上面这个链接里详细说明了这两种强制类型转换和另外两种强制类型转换const_cast、reinterpret_cast,总结起来就是,static_cast是静态的类型转换,缺少了类型安全检查,不推荐使用,dynamic_cast则有类型安全检查,使用更安全。另外两种强制类型转换没使用过,不知道效果。
bool CSnapWidget::eventFilter(QObject *obj, QEvent *ev)
{
/*
*/
QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(ev); /// 不安全,会产生异常
if (NULL == mouseEvent)
{
return false;
}
/*
*/
}
上图是某个自己封装的截图功能,在鼠标拖动复选截图时,会在上图这个代码位置报错,异常导致程序崩溃,调试发现,就是指针mousEevent转换失败,期间尝试过加锁,但异常依旧,然后网上搜索强制类型转换的相关资料,使用dynamic_cast解决了问题。
bool CSnapWidget::eventFilter(QObject *obj, QEvent *ev)
{
/*
*/
QMouseEvent *mouseEvent = dynamic_cast<QMouseEvent*>(ev); /// 有类型安全检查,更安全
if (NULL == mouseEvent)
{
return false;
}
/*
*/
}