osgWidget 继承使用 细节处理

以下是一个简单的继承 osgWidget::Box 的使用案例:

#include <osgWidget/Box>
#include <osgWidget/WindowManager>

class MyBox : public osgWidget::Box
{
public:
    MyBox(osgWidget::WindowManager* wm) : osgWidget::Box(wm) {}

    virtual void mouseEnterEvent(osgWidget::Widget* widget, float, float, float, float)
    {
        std::cout << "Mouse entered" << std::endl;
    }

    virtual void mouseLeaveEvent(osgWidget::Widget* widget, float, float, float, float)
    {
        std::cout << "Mouse left" << std::endl;
    }
};

int main()
{
    osg::ref_ptr<osgViewer::Viewer> viewer = new osgViewer::Viewer;

    osg::ref_ptr<osgWidget::WindowManager> wm = new osgWidget::WindowManager(viewer.get(), 800, 600, true);

    osg::ref_ptr<MyBox> box = new MyBox(wm.get());
    box->setOrigin(200, 200);
    box->resize(200, 100);
    box->setColor(osg::Vec4(1.0, 0.0, 0.0, 1.0));

    wm->addChild(box.get());

    viewer->setSceneData(wm.get());

    return viewer->run();
}

这个例子创建了一个自定义的 osgWidget::Box 类,并覆盖了其鼠标进入和鼠标离开事件。然后,它在窗口管理器中添加了一个 MyBox 实例,并将其设置为场景数据,最后启动了查看器。当鼠标进入或离开 MyBox 时,相应的信息将在控制台上打印出来。

猜你喜欢

转载自blog.csdn.net/vcit102/article/details/130316414