Pregunta

Necesito poder copiar un QWidget para poder duplicar una ventana porque cambiará durante el tiempo de ejecución. ¿es posible?

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();
}
¿Fue útil?

Solución

Esto es por diseño. La forma habitual de resolverlo es implementar un método (generalmente llamado clone()) que le permite especificar la semántica exacta que debe aplicarse al copiar instancias de su clase. Este enfoque también evita que las copias involuntarias se hagan implícitamente, por ejemplo, las clases de contenedores.

Desde el QT Docs:

Sin constructor de copias o operador de asignación

Qobject no tiene un constructor de copias ni un operador de asignación. Esto es por diseño. En realidad, se declaran, pero en una sección privada con la macro Q_DISABLE_COPY (). De hecho, todas las clases de QT derivadas de QObject (directa o indirecta) usan esta macro para declarar que su constructor de copias y operador de asignación es privado. El razonamiento se encuentra en la discusión sobre Identidad vs valor En la página del modelo de objeto QT.

La principal consecuencia es que debe usar Pointers to Qobject (o en su subclase Qobject) donde de otro modo podría tener la tentación de usar su subclase Qobject como valor. Por ejemplo, sin un constructor de copias, no puede usar una subclase de Qobject como el valor que se almacenará en una de las clases de contenedores. Debes almacenar consejos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top