En mi aplicación tengo una ventana dividida por un QSplitter, y necesito eliminar un widget.Cómo eliminar QWidgets de QSplitter
¿Cómo puedo hacer eso? No puedo encontrar métodos útiles
En mi aplicación tengo una ventana dividida por un QSplitter, y necesito eliminar un widget.Cómo eliminar QWidgets de QSplitter
¿Cómo puedo hacer eso? No puedo encontrar métodos útiles
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.
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.
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.
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.
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)
proporcionar un enlace a doc para takeWidget. – W55tKQbuRu28Q4xv
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);
}
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.) –