質問

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();
}
役に立ちましたか?

解決

これは設計によるものです。それを解決する通常の方法は、メソッドを実装することです(通常は呼ばれます clone())これにより、クラスのインスタンスをコピーするときに適用すべき正確なセマンティクスを指定できます。また、このアプローチにより、意図しないコピーが暗黙的に行われるのを防ぎます。たとえば、コンテナクラスなどです。

から QTドキュメント:

コピーコンストラクターまたは割り当てオペレーターはありません

QObjectには、コピーコンストラクターも割り当てオペレーターもありません。これは設計によるものです。実際、それらは宣言されていますが、Macro Q_Disable_Copy()を使用したプライベートセクションで。実際、Qobject(直接または間接)から派生したすべてのQTクラスは、このマクロを使用して、コピーコンストラクターと課題オペレーターをプライベートであると宣言します。推論は議論にあります IDと値 QTオブジェクトモデルページ。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top