Как поместить ViewerWidget osgEarth в MdiArea с вкладками?

Есть ли что-то особенное в установке osgEarth? ViewerViewer в QMdiArea? Я создал QMdiArea как центральный виджет (называется setCentralWidget) вместо того, чтобы принимать osgEarthЗритель напрямую как центральный виджет.

QMdiArea *mdiArea = new QMdiArea(this);
setCentralWidget(mdiArea); // call to QMainWindows method, snippet is taken from app's MainWindow
mdiArea->addSubWindow(viewerWidget); // this doesn't work, globe is not drawn

Все, что я пробовал, не сработало … кроме osgEarth ViewerWidget устанавливается в качестве центрального виджета моего MainWindow, Также попробовал MultiViewerWidget без какого-либо успеха, но потому что мне нужен только один вид ViewerWidget должно быть в порядке или нет?

Я посмотрел на примеры, но не смог использовать один из них в качестве отправной точки.

Есть намеки? Заранее спасибо.

2

Решение

Вы можете попробовать это, где Form1 это QDialog

в main.cpp

int main()
{
QApplication a(argc, argv);
Form1 w=new Form1();//qdialog
.................//do something to initial the map
w.loadWidget(viewerWidget);
w.show();//the order of the loadwiget() and show() is important!!!!!
a.exec();
}

в Form1.cpp

void Form1::loadWidget(QWidget *qwidget)
{
qwidget->setMinimumSize( ui.mdiArea->width(),ui.mdiArea->height());
QMdiSubWindow * subW=ui.mdiArea->addSubWindow(qwidget);
subW->setWindowFlags(Qt::SubWindow | Qt::FramelessWindowHint);
subW->maximumSize();
}

Это хорошо работает с qt 4.8.4+osgearth 2.3

1

Другие решения

Попробуйте установить геометрию подокна перед запуском пользовательского интерфейса.

   QMdiSubWindow* sw = mdiArea->addSubWindow(viewerWidget);
sw->setGeometry(...);

В противном случае OSG, вероятно, запутается.

Получил ответ от Gwaldron на форуме osgEarth Вот и это сработало.

Также поможет установка минимального размера для viewerWidget (например, для позиционирования на TabWidget). Смотрите мой вопрос и ответ Вот.

1

По вопросам рекламы [email protected]