Как открепить вкладку с помощью osgViewer от QTabWidget?

Я хочу открепить QWidget от QTabWiget (установлен как centralWidget). Вкладка содержит некоторый контент Open Scene Graph (окно 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 не видно (без синего холста)...


person Beachwalker    schedule 01.08.2013    source источник
comment
Пробовали ли вы явно изменить родитель OSG QWidget на новый QDialog перед добавлением в макет?   -  person RobbieE    schedule 05.08.2013
comment
Что происходит, когда вы удаляете код изменения размера? Я полагаю, что это испортит представление OpenGL.   -  person Phlucious    schedule 06.08.2013
comment
Просто идея - попробуйте изменить родителя dlg до (или/и после) удаления его из виджета вкладки.   -  person Dmitry Sazonov    schedule 06.08.2013
comment
@RobbieE Да, я сделал ... не удалось.   -  person Beachwalker    schedule 08.08.2013
comment
@Phlucious Что вы подразумеваете под удалением и для какого элемента управления?   -  person Beachwalker    schedule 08.08.2013


Ответы (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
person Phlucious    schedule 05.08.2013