ウィジェットの単純な階層があります: GraphWidget -> MotionWidget -> NodeWidget。私は Qt を初めて使用するので、一部の内部がどのように機能するかについてはまだよくわかりません。基本的に、GraphWidget は単一の MotionWidget Mを作成し、 M の親をそれ自体に設定します。その後、 Mは立ち去り、多数の NodeWidget を作成します。ただし、NodeWidgets がペイントされることも、paintEvent() 関数が呼び出されることもありません。
GraphWidget を使用せずに MotionWidget を直接作成してみましたが、すべてが機能します。では、GraphWidget を階層に追加すると、なぜ問題が発生するのでしょうか?
これは、私のプロジェクトから関連するコードを貼り付けたものです。GraphWidget::dumpObjectTree() からの出力も上部に含めました。
編集:貼り付けリンクを含めるのを忘れました;)http://rafb.net/p/Zp39CF94.html
更新: MotionWidget をレイアウトにラップしました。
前:
GraphWidget :: GraphWidget( QWidget *parent ) : QWidget( parent )
{
setFixedSize( 500, 500 );
MotionWidget *n = new MotionWidget( 5, this );
}
後
GraphWidget :: GraphWidget( QWidget *parent ) : QWidget( parent )
{
setFixedSize( 500, 500 );
QVBoxLayout *l = new QVBoxLayout;
MotionWidget *n = new MotionWidget( 5 );
l->addWidget( n );
setLayout( l );
}
さて、後者が機能します。つまり、すべてが描画されます。質問は次のようになります...なぜですか?最初のケースでは機能しなかったのに、2 番目のケースでは機能したのはなぜですか?