Domanda

ho bisogno di essere in grado di copiare un QWidget così posso duplicare una finestra perché cambierà durante il runtime. è possibile?

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();
}
È stato utile?

Soluzione

Questo legato alla progettazione. Il solito modo per risolverlo è quello di implementare un metodo (in genere chiamato clone()) che consente di specificare la semantica esatti che dovrebbero essere applicati quando si copiano le istanze della classe. Questo approccio impedisce anche copie involontari sia effettuato implicitamente, per esempio da classi container.

Qt docs :

Nessun costruttore di copia o la cessione dell'operatore

QObject non ha né un costruttore di copia, né un operatore di assegnazione. Ciò è di progettazione. In realtà, essi sono dichiarati, ma in un privato sezione con il Q_DISABLE_COPY macro (). Infatti, tutte le classi Qt derivato da QObject (diretta o indiretta) utilizzare questa macro per dichiarare il costruttore di copia e operatore di assegnamento di essere privato. Il ragionamento si trova nella discussione sulla Identità vs Valore sul Qt Oggetto di pagina del modello.

La principale conseguenza è che si dovrebbe utilizzare i puntatori per QObject (o per la sottoclasse QObject) dove si potrebbe altrimenti essere tentati di usare sottoclasse QObject come un valore. Ad esempio, senza una copia costruttore, non è possibile utilizzare una sottoclasse di QObject come il valore di essere memorizzata in una delle classi contenitore. È necessario memorizzare i puntatori.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top