2

osgEarth を に入れることについて何か特別なことはありViewerViewerますQMdiAreaか? のビューアーを中央ウィジェットとして直接使用する代わりに、QMdiArea中央ウィジェット (と呼ばれる)を作成しました。setCentralWidgetosgEarth

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

私が試したすべてが機能しませんでした... osgEarthViewerWidgetが私のMainWindow. またMultiViewerWidget、成功せずに試してみましたが、必要なビューは 1 つだけなので、ViewerWidget大丈夫ですか?

例を調べましたが、そのうちの 1 つを出発点として使用することに成功しませんでした。

ヒントはありますか?前もって感謝します。

4

2 に答える 2

1

UI を開始する前に、サブウィンドウのジオメトリを設定してみてください。

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

そうしないと、OSG が混乱する可能性があります。

こちらの osgEarth フォーラムで Gwaldron からこの回答を得て、うまくいきました。

また、viewerWidget の最小サイズを設定すると役立ちます (TabWidget での配置など)。ここで私の質問と回答を参照してください。

于 2013-07-22T06:52:10.063 に答える
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

于 2013-07-23T07:15:41.243 に答える