1

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

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

任何人都知道如何在不破坏 osgViewer 的情况下取消停靠选项卡?

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

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 视图(没有蓝色画布)......

4

1 回答 1

-1

当您在将 osgViewer从 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
于 2013-08-05T21:26:16.603 回答