将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,但没有成功,但是因为我只需要一个 View ,所以ViewerWidget应该可以,还是不可以?

我查看了示例,但没有成功使用其中一个作为起点。

有什么提示吗?提前致谢。

最佳答案

您可以尝试一下,其中Form1QDialog
在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

09-08 09:57