我想从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视图(没有蓝色画布)......
答案 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