2008-12-16 15 views

Respuesta

10

Muchas cosas en Qt no pueden eliminarse "tradicionalmente". En su lugar, llame a hide() y destrúyalo. De QSplitter documentación:

Cuando se oculta() a un niño su espacio será se distribuirá entre los demás niños. Se restablecerá cuando muestre() de nuevo.

1

Me gusta la respuesta de Tuminoid. Pero si es absolutamente necesario que se elimine, intente obtener el widget que desea eliminar y llame al setParent(NULL) en ese widget. Esa es mi mejor suposición.

19

No me queda claro si desea conservar el widget y colocarlo en otro lugar, o si desea destruir el widget.

  • Destruyendo el widget: Si puede obtener un puntero al widget, puede simplemente eliminarlo. El divisor será con seguridad se notificará que su hijo está siendo eliminado y lo eliminará de sí mismo.

  • Preservar el widget: Si agarras el puntero al widget, puede basta con establecer su matriz a otro control y añadirlo a la disposición de otro widget y se mostrará allí. Esto es seguro porque se notificará al QSplitter que se está reemplazando un de sus hijos.

Si desea establecer el padre a NULL (respuesta de cjhuitt) tenga en cuenta que usted es ahora responsable de la limpieza de esa memoria, porque el widget ya no tiene un padre.

+2

Tenga en cuenta que cuando se establece el padre a NULL su widget se convierte en una ventana principal ... (a menos que lo oculte en primer lugar.) –

0

Si mantiene un puntero al widget, simplemente elimínelo o utilice deleteLater() si quiere estar seguro.

Si no tiene el puntero del widget, use la función QSplitter :: widget (int index). Luego, puede usar invocar su ranura deleteLater().

Si no tiene el índice de widgets, pero aún conoce el widget objectName(), entonces QObject :: findChild() es su única forma de obtener el puntero del widget.

0

Otra manera fácil de evitar que el widget hijo se elimine es usar QSplitter.takeWidget (niño). Esta es también la forma recomendada de eliminar el widget de un divisor. (Documentación de Qt)

+2

proporcionar un enlace a doc para takeWidget. – W55tKQbuRu28Q4xv

0

Me encontré con el mismo problema. En Qt 4.8 para ocultar temporalmente uno de los widgets de un QSplitter simplemente lo oculto. Sin embargo, no es suficiente, ya que el asa del divisor aún está disponible para moverse.Sin embargo, el mango puede ser accedido y oculta así:

frameA->setVisible(conditionA); 
frameB->setVisible(conditionB); 
if (!(conditionA && conditionB)) // if only 1 frame is visible 
{ 
    splitter->handle(0)->setVisible(false); 
}