在创建OSG窗口程序时,如果使用自定义操作器的话,一般会在操作器中引用view指针,这里可能会导致程序崩溃;
osgQt源码中,view定义为普通指针:
OSGRenderer* m_renderer {nullptr};
所以,在自定义操作器中,比如 handleMouseWheel(const GUIEventAdapter& ea, GUIActionAdapter& us) 事件中,将 us 强制转为 view 时,不能使用智能指针 osg::ref_ptr ,否则view 会被析构掉,进而导致程序崩溃,要使用普通指针类型:
osgViewer::View* view = dynamic_cast<osgViewer::View*>(&us);
以下操作,将导致程序崩溃
// 错误示例,源码view为普通指针,此处定义为智能指针,将导致view被析构
//
osg::ref_ptr<osgViewer::View> view = dynamic_cast<osgViewer::View*>(&us);