首页 文章

如何从QTabWidget中使用osgViewer取消选项卡?

提问于
浏览
1

我想从QTabWiget中取消QWidget(设置为centralWidget) . 该选项卡包含一些Open Scene Graph内容(OpenGL窗口) . 从列表中删除Tab并将其放入新的对话窗口(=>从选项卡中取消停靠)时,场景数据似乎已损坏 . 它适用于“标准小部件”,但osg似乎忘记了场景 .

令人惊讶的是,当使用QDockWidget时,取消停靠工作(在取消停靠窗口后可以看到场景) .

任何人都知道如何取消选项卡而不破坏osgViewer?

代码要求从tab中取消停靠并在新的对话框窗口中显示:

QWidget* gv = // points to an osgViewer in a qt widget 
QDialog* dlg = new QDialog(this); 
dlg->setWindowTitle("hello earth"); 
QHBoxLayout* pMainLay = new QHBoxLayout; 
gv->setMinimumSize(100,100); 
gv->setGeometry(100,100,300,300); 
pMainLay->addWidget(gv); 
dlg->setLayout(pMainLay); 
ui->tabWidget->removeTab(0); // removes the tab at position 0 (docked window)
dlg->show(); // should show the undocked dialog

新对话框中没有任何内容可供查看 . 我错过了什么吗?如何将osg视图正确地“复制”到新的小部件/对话框中?我应该使用复合查看器来完成这种任务吗?似乎甚至没有可见的空osg视图(没有蓝色画布)......

1 回答

  • -1

    将osgViewer添加到另一个小部件 before 将其从QTabWidget中删除时,可能会出现问题 . 更改订单可能会有所帮助 .

    QWidget* gv = // points to an osgViewer in a qt widget 
    ui->tabWidget->removeTab(0); // removes the tab at position 0 (docked window)
    QDialog* dlg = new QDialog(this); 
    dlg->setWindowTitle("hello earth"); 
    QHBoxLayout* pMainLay = new QHBoxLayout; 
    pMainLay->addWidget(gv); 
    dlg->setLayout(pMainLay); 
    dlg->show(); // should show the undocked dialog
    

相关问题