osgWidget.Callback是一个抽象类,用于定义osgWidget中的回调函数。它在osgWidget组件中用于响应用户交互和操作。
osg::Referenced → osgWidget::Callback
以下是osgWidget.Callback中的一些公共方法。
参数:
描述:
这个虚函数定义了osgWidget回调的核心操作,当某个事件被触发时,该函数被调用。在这个回调函数中,可以定义任何与事件相关的操作。
以下是可以用osgWidget.Callback实现的一个基本场景:
class MyCallback : public osgWidget::Callback
{
public:
virtual void operator() (osgWidget::Event &ev)
{
if (ev.getEventType() == osgWidget::EVENT_POINTER_UP)
{
osgWidget::Widget* widget = ev.getWidget();
if (widget)
{
// the pointer was released over a widget
osg::notify(osg::DEBUG_INFO) << "A pointer was released over the widget '" << widget->getName() << "'" << std::endl;
}
}
}
};
int main(int argc, char **argv)
{
osg::ref_ptr<osg::Group> root = new osg::Group;
// create an example widget
osg::ref_ptr<osgWidget::Box> box = new osgWidget::Box("box", osgWidget::Box::VERTICAL);
box->setOrigin(osgWidget::Box::LEFT_BOTTOM);
box->setPosition(50, 50);
box->setPadding(10);
// add some widgets to the box
box->addWidget(new osgWidget::Label("label", "Click me!"));
box->addWidget(new osgWidget::Button("button", "OK"));
box->addWidget(new osgWidget::Slider("slider"));
box->addWidget(new osgWidget::HBox("hbox"));
// set up a callback for the example widget
MyCallback* callback = new MyCallback;
box->setCallback(callback);
// add the example widget to the root node
root->addChild(box->getNode());
// run the app
osgViewer::Viewer viewer;
viewer.setSceneData(root.get());
return viewer.run();
}
在这个例子中,我们创建了一个名为MyCallback
的类,它继承自osgWidget.Callback,并实现了()
操作符重载。当用户在“点击我”标签上释放鼠标时,MyCallback类的操作符将被调用。这个操作符检查事件类型是否为指针抬起,如果是,则获取与事件关联的widget,并输出相应的消息。例子接着创建一个名为box
的osgWidget::Box实例,并将MyCallback类分配给它。最后,我们将box添加到场景图中,并启动OSG查看器。