1

QTabWiget から QWidget をドッキング解除したい (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ビューが表示されていないようです(青いキャンバスはありません)...

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 に答える