3

そのため、QTとOSGを統合しているときに問題が発生しました。QT/OSGプログラムは問題なく動作しています。レイアウトは、以下に表示されているものと似ています。

|--------------------------|
|  1   |         2         |
|      |                   |
|      |                   |
|      |                   |
|      |                   |
|      |                   |
|      |-------------------|
|      |         3         |
|      |                   |
|--------------------------|

中央のウィジェットは、3つのサブウィジェットを持ち、グリッドレイアウトを使用しているQFrameで構成されています。ウィジェット1は、グリッドレイアウトを備えたQFrameです。ウィジェット2は、以下で説明するOSGビューアです。ウィジェット3は、グリッドレイアウトを備えたQFrameです。

2つには、osgviewerQT.cppの例をモデルにしたウィジェットが入力されています。基本的には埋め込みウィンドウを使用し、10ミリ秒ごとに起動してosgフレーム関数を呼び出すQTimerがあります。

他に4つのウィジェットがあります。動的に入力する2つのQLabelと2つのQTable。これら4つのウィジェットすべてを1のグリッドレイアウトに追加しています。これを行うと、すべてがうまく機能し、2で素敵なシーングラフが得られます。1つ変更すると、これら4つのウィジェットを1から2のグリッドレイアウトに移動すると、シーングラフが突然消えます。何が悪いのか考えてみませんか?valgrindをチェックインしたので、メモリの問題ではなく、libの使用方法に問題があると確信しています。フレーム関数が呼び出されていることを確認しました。

4

2 に答える 2

3

解決策を見つけました。ビューアコントロールのサイズヒントを追加する必要があります。このようなものは大丈夫です:

AbstractQTGLWidget.hpp

...
class AbstractQTGLWidget ... {
  ...
protected:
  QSize sizeHint() const { return QSize(400,300); }
  ...
};

width()およびheight()プロパティが使用されている場合、問題はコンストラクター内にあると思います(ただし、100%確実ではありません) 。

さまざまなレイアウト、各ウィジェットの幅と高さを確立する際のさまざまな優先順位。したがって、コンストラクターは最終的な幅と高さを認識しません。

初期の幅と高さを指定すると、基になるosgビューアがカメラとオブジェクトの参照を計算し、それに応じてプロセスを開始できると思います。オブジェクトは正しいサイズで開始されたため、幅と高さのその後の変更は正しく適用されますが、最終的なものではありません。

たぶん、コントロールはそれが0 x 0ピクセルのサイズであると考えており、レンダラーは初期化に夢中になっています...

0の場合: 0で

1で: 1で

于 2012-05-21T15:30:54.643 に答える
1

提供されたコードで問題を再現してみました。ただし、最新のOpenSceneGraph(およびそのOpenThreads依存関係)のビルドを取得できませんでした。

そこで、例をさらに単純にし、OSGウィジェットの代わりにQFrameを使用しました。

コードをかなり実験してきたので、私の提案は、呼び出しを追加してみることです。

 viewer->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
于 2012-05-13T15:33:27.227 に答える