如何将 osgEarth 的 ViewerWidget 放入选项卡式 MdiArea?
Posted
技术标签:
【中文标题】如何将 osgEarth 的 ViewerWidget 放入选项卡式 MdiArea?【英文标题】:How to put osgEarth's ViewerWidget into an tabbed MdiArea? 【发布时间】:2013-07-21 16:58:05 【问题描述】:将 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
应该可以,还是不行?
我查看了示例,但没有成功使用其中一个作为起点。
有什么提示吗?提前致谢。
【问题讨论】:
osgEearth 使用 OpenGL 对吗?如果我没记错的话,QMdiArea 与 OpenGL 小部件存在一些问题。不要相信我的话,因为我可能是错的。 【参考方案1】:你可以试试这个,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
【讨论】:
【参考方案2】:尝试在启动 UI 之前设置子窗口的几何图形。
QMdiSubWindow* sw = mdiArea->addSubWindow(viewerWidget);
sw->setGeometry(...);
否则OSG可能会变得混乱。
Gwaldron 在 osgEarth 论坛 here 上得到了这个答案,它奏效了。
同时设置 viewerWidget 的最小尺寸也会有所帮助(例如,用于在 TabWidget 上定位)。看我的问答here。
【讨论】:
您好 Thomas,我是 osgearth 和 qt 的新手。我想创建一个 qt 应用程序并在主窗口中显示 osgearth 视图,但我不能!我的问题是 qt 窗口和 osgearth 窗口之间的集成。你能帮帮我吗?以上是关于如何将 osgEarth 的 ViewerWidget 放入选项卡式 MdiArea?的主要内容,如果未能解决你的问题,请参考以下文章
[原][译]关于osgEarth::VirtualProgram