0

私は実際に qt( container) inerhiting fromQWidgetでモジュールを作成しています。これには複数plotの sが含まれてgraphおり、それらすべてが inerhit from を提示していQWidgetます。

したがって、次のようになります。

  • 1containerは次のものを持つことができます:
    • n plots ここで、それぞれに含まれる
    • 1 graph.

昨日は、バグを見つけるために多くの時間を費やしました。plotペイント イベントをキャッチするために、(デバッグ目的で) コンテナーのコンストラクターに追加された n だけが発生しました。

plotがすでに構築されている間に同じメソッドによって追加されたすべてのcontainerは、イベントを受け取ることができませんでした。

後で、私が支援を求めた後、同僚が、私のcontainer( mainwindow-form にある) Qtdesigner でレイアウトを割り当てる必要があると説明してくれました。私はそれを試してみましたが、それが私の問題を解決したことに驚きました. 動的に生成された をレイアウトに追加した後plotcontainerすべてのウィジェットが期待どおりにイベントを受信して​​いました。

しかし、私は彼の説明を理解できなかったので、これ以上彼に迷惑をかけたくないので、ここで質問します.

では、動的に生成された他の QWidgets の子オブジェクトである動的に生成されたウィジェットが、mainwindow割り当てられたレイアウトを持つために子である親を必要とするのはなぜですか? また、これが単なる例外的なケースではない場合、デフォルトで割り当てられていないのはなぜですか?また、そのような問題を抱えているケースをウェブ上で見つけることができなかったのはなぜですか?

4

1 に答える 1

0

兄弟ウィジェットが重なったり、ウィジェットのサイズがゼロになったりすると、副作用が発生する可能性があります。レイアウトが行うことは、それらのサイズを変更し、それらが重ならないようにすることだけです。

ペイントイベントをキャッチするために、コンストラクターでコンテナーに追加されました

ペイント イベントを "キャッシング" するとはどういう意味ですか? また、それはコンストラクターと何の関係がありますか? すべてのクラス (コンテナー、プロット、およびグラフ) は から派生していると主張しますQWidgetpaintEventデフォルトの背景ブラシ以外に独自のコンテンツを持たないように設計されていない限り、それらはすべて を実装する必要があります。

どういうわけか物事を複雑にしすぎていると思いますが、問題を再現するためにコンパイルできる自己完結型のコードがなければ、ぐるぐる回ることになります。私の回答を自由に見てください。それらはすべて単一ので構成されてmain.cppおり、かなりの機能が詰め込まれている場合があります。ほとんどの場合、特定の手法を示すために必要なコード以外はありません。あなたの質問には、同様に最小化されたコンパイル可能な例が含まれている必要があります。

于 2016-05-04T15:29:47.983 に答える