Есть ли что-то особенное в установке 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
должно быть в порядке или нет?
Я посмотрел на примеры, но не смог использовать один из них в качестве отправной точки.
Есть намеки? Заранее спасибо.
Вы можете попробовать это, где 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
Попробуйте установить геометрию подокна перед запуском пользовательского интерфейса.
QMdiSubWindow* sw = mdiArea->addSubWindow(viewerWidget);
sw->setGeometry(...);
В противном случае OSG, вероятно, запутается.
Получил ответ от Gwaldron на форуме osgEarth Вот и это сработало.
Также поможет установка минимального размера для viewerWidget (например, для позиционирования на TabWidget). Смотрите мой вопрос и ответ Вот.