15

実行時にウィンドウが変更されるため、ウィンドウを複製できるように、Qwidgetをコピーできる必要があります。これは可能ですか?

void Duplicate(QWidget * Show)
{
 //I tried...
 Qwidget Shw = *Show; //but operator= is private
 //and the copy constructor (I think), which is also private
 Qwidget Shw(*Show);
 //

 Shw.Show();
}
4

1 に答える 1

15

これは仕様によるものです。clone()これを解決する通常の方法は、クラスのインスタンスをコピーするときに適用する必要がある正確なセマンティクスを指定できるメソッド(通常はと呼ばれる)を実装することです。このアプローチは、意図しないコピーが、たとえばコンテナクラスによって暗黙的に作成されることも防ぎます。

Qtドキュメントから:

コピーコンストラクタまたは代入演算子はありません

QObjectには、コピーコンストラクターも代入演算子もありません。これは仕様によるものです。実際には宣言されていますが、マクロQ_DISABLE_COPY()を使用したプライベートセクションにあります。実際、QObject(直接または間接)から派生したすべてのQtクラスは、このマクロを使用して、コピーコンストラクターと代入演算子をプライベートとして宣言します。その理由は、QtオブジェクトモデルページのIDと値に関する説明にあります。

主な結果は、QObject(またはQObjectサブクラス)へのポインターを使用する必要があることです。そうしないと、QObjectサブクラスを値として使用したくなる可能性があります。たとえば、コピーコンストラクタがないと、QObjectのサブクラスをコンテナクラスの1つに格納される値として使用することはできません。ポインタを保存する必要があります。

于 2011-07-24T20:53:26.510 に答える