2

Qt デザイナーを使用して UI をデザインしています。デザインをコードに実装するときは、多重継承アプローチを使用します。この方法を使用する本当の理由はありません。単純に簡単だとわかっただけです。

とにかく、生成されたヘッダー ファイルを調べると、setupUi() 関数ですべてがヒープに割り当てられていることに気付きました。オブジェクトが親よりも長生きする必要は実際にはありません。これによると、私の場合、ヒープに割り当てるべきではありません。

親オブジェクトがスタックに割り当てられた小さなモーダル ダイアログである場合、その UI オブジェクトがヒープに割り当てられるのはもったいないことではないでしょうか?

これに対する回避策はありますか? 心配するのはやめたほうがいいですか?これが問題になっている状況はまだ見つかっていませんが、それでも気になります。実際、それはまったく問題ではありません。ただ知りたいだけです。

4

2 に答える 2

2

一般的な Qt の慣例は、有効期間が現在のスコープに制限されていない限り、QObject にヒープ割り当てを使用することです。これは無駄に思えるかもしれませんが、UI を構築するコンテキストでは、パフォーマンスへの影響はごくわずかです。

また、Qt では pimpl イディオムが広範に使用されているため、作成されたすべての QObject には常にヒープが割り当てられる内部 QObjectPrivate があるため、すべてをスタックに保持することは不可能です。

ですから、心配するのをやめることをお勧めします。:)

于 2013-01-25T12:35:16.780 に答える
2

心配する必要はありません... QT の設計では、スタック上で一連のウィジェットを組み立てることができます。親ウィジェットと子ウィジェットの間には所有権の階層があります。親ウィジェットはすべての子を所有します。割り当てが正しい順序で行われていない場合 (子が最初)、スタック割り当てが壊れて二重削除が発生する可能性があります。この件に関するQT のドキュメントを参照してください(@Subaru がこれを掘り下げました)。良い考えです。そのため、Iirc 'QObject' と 'QWidget' はコピーできません。

于 2013-01-25T11:19:02.620 に答える