デザイナーが生成した UI クラスは、Qt で次のいずれかの方法を使用して埋め込まれていることがわかります。
- ポインター メンバーとしての集計
- 集計
- 複数のプライベート継承
しかし、2 番目の方法はカスタム スロットをサポートしていないと言われています。誰かがこれについて詳しく説明できますか?アグリゲーションを使用しているときにカスタム スロットを実装できないのはなぜですか?
また、各方法の長所と短所についても詳しく説明します。
デザイナーが生成した UI クラスは、Qt で次のいずれかの方法を使用して埋め込まれていることがわかります。
しかし、2 番目の方法はカスタム スロットをサポートしていないと言われています。誰かがこれについて詳しく説明できますか?アグリゲーションを使用しているときにカスタム スロットを実装できないのはなぜですか?
また、各方法の長所と短所についても詳しく説明します。
2 番目のオプションがカスタム スロットをサポートしていないというのは本当ではないと思います。
この選択については、Qt の公式ドキュメントで説明されています。http://doc.qt.io/qt-4.8/designer-using-a-ui-file.html#compile-time-form-processingを参照してください
ただし、このドキュメントに示されている 3 つのアプローチは、Qt Creator に示されている 3 つのオプションに対応していないことに注意してください。ドキュメントに示されている最初のアプローチである The Direct Approach は、ここでの 3 つの選択肢の 1 つではありません。このアプローチは、この設定が制御する Qt Creator 機能では利用できません。2 番目のオプション (集約、または「単一継承アプローチ」) には 2 つの種類があります。わずかな違いは、ui クラス メンバーがデータ メンバー (2 番目のオプション) であるか、ポインター メンバー (最初のオプション) であるかです。
私の好みは、3 番目のオプションである多重継承です。これは、Qt 4 を使用した C++ GUI プログラミング(オンラインで無料で入手できる初版) で使用されている方法でもあり、このアプローチが最もクリーンであると呼ばれています。私がクラスを書いているとき、私は 2 つのオブジェクトの観点から実際には考えていません。1 つは UI で、残りは機能です。1 つだけを考えており、多重継承が最適です。しかし、ドキュメントには、「ポインタ メンバーとしての集約」がデフォルトである理由が示されています。