框架内的osgWidget标签不会触发回调

osgWidget label within frame won't trigger the callback

这是我的问题 我是 osg 的新手,我正在尝试通过将 osgWidget::Labels 添加到 osgWidget::Box 来创建类似下拉列表的内容,然后将此框设置为 osgWidget::Frame 的 [=33] =] 所有这些工作正常,直到我点击标签后我的回调 "labelClicked" 从未真正触发的部分。

我尝试将此回调添加到其他小部件,例如输入,甚至是我将框与标签放在一起的实际框架,两者都工作正常。

这是我用来向下拉列表添加标签的函数:

osgWidget::Label* DropdownInput::createLabel(const std::string& l, unsigned int size) {

osgWidget::Label* label = new osgWidget::Label("", "");

label->setFont("fonts/Vera.ttf");
label->setFontSize(size);
label->setFontColor(1.0f, 1.0f, 1.0f, 1.0f);
label->setLabel(l);

return label;
}

void DropdownInput::addLabel(string text){

osg::ref_ptr<osgWidget::Label> label1 = createLabel(text,15);

label1->setName(text);
label1->setPadding(2.0f);
label1->setColor(1,1,1, 1);
label1->setSize(300.0f, 40);

label1->setImage( "img.png" );
label1->addCallback( new osgWidget::Callback(&DropdownInput::labelClicked, this, osgWidget::EVENT_MOUSE_PUSH) );



dropdownContent.push_back(label1); //list where I store the labels for flitering purposes
this->dropdownBox->addWidget(label1);

}

和回调:

bool DropdownInput::labelClicked(osgWidget::Event& ev) { 
    cout<<"label clicked!"<<endl;
    return true;
}

已经尝试将标签放在框架内的框内,并将回调添加到此框架,然后将其添加到主框,但不仅没有正确调整大小,而且在过滤标签时造成延迟这不是一个选择。 还尝试了其他类型的事件,如鼠标悬停等,但仍然没有来自标签的回答。

我被要求避免使用其他 UI 库,所以如果可能的话我更喜欢基于 osgWidget 的解决方案。

所以,现在我有点迷茫了,任何帮助将不胜感激。

如果您觉得我的解释不够容易理解,请不要犹豫告诉我,因为这是我第一次在这里发帖:)

对于标签,您应该首先将推送事件添加到标签事件掩码:

label->addEventMask(osgWidget::EVENT_MOUSE_PUSH);

否则label->canMousePush()将returnfalse并且永远不会调用回调。