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

时间:2013-08-01 21:27:32

标签: qt tabs openscenegraph qtabwidget qdockwidget

我想从QTabWiget中取消QWidget(设置为centralWidget)。该选项卡包含一些Open Scene Graph内容(OpenGL窗口)。从列表中删除Tab并将其放入新的对话窗口(=>从选项卡中取消停靠)时,场景数据似乎已损坏。它适用于“标准小部件”,但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视图(没有蓝色画布)......

1 个答案:

答案 0 :(得分:-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