Pregunta

En mi aplicación tiene una ventana dividido por un QSplitter, y necesito eliminar un artilugio.

¿Cómo puedo hacer eso? No puedo encontrar métodos útiles

¿Fue útil?

Solución

Muchas cosas en Qt no pueden ser "tradicional" eliminado. En lugar llamar ocultar () en él y destruir él. De QSplitter documentación:

  

Cuando se oculta () a un niño su espacio se   ser distribuidos entre la otra   niños. Se restableció cuando   mostrar () de nuevo.

Otros consejos

No está claro para mí si desea conservar el widget y ponerlo en otro lugar, o si quieres destruir el widget.

  • Destruir el widget: Si es posible obtener un puntero al widget, puede simplemente eliminarlo. El divisor se con seguridad ser notificado de que su hijo está el borrado y lo eliminará de sí misma.

  • Preservar el widget: Si agarras     el puntero al widget, puede     basta con establecer su matriz a otra     widget y añadirlo a otra     diseño y del Reproductor se mostrarán     ahí. Esto es seguro porque el     QSplitter será notificado de que uno     de sus hijos está siendo reasocian.

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.

Me gusta la respuesta de Tuminoid. Pero si es absolutamente necesario que se elimine, trate de conseguir el widget que desea eliminar, y llamando setParent( NULL ) en ese widget. Esa es mi mejor conjetura.

Si mantiene un puntero al widget, entonces simplemente eliminarlo, o utilizar deleteLater () si quieres estar en el lado seguro.

Si usted no tiene el puntero del widget, widget de utilizar QSplitter :: (int index) función. A continuación, puede utilizar invocar su deleteLater () ranura.

Si usted no tiene el índice de widgets, pero todavía se conoce el widget de nomObjeto (), entonces QObject :: findChild () es la única manera de obtener el puntero del widget.

Me encontré con el mismo problema. En Qt 4.8 para ocultar temporalmente uno del widget de un QSplitter simplemente ocultarlo. Sin embargo, no es suficiente, ya que el mango divisor está disponible para moverse. Sin embargo, el mango se puede acceder y escondido, así:

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

Otra manera fácil de prevenir el widget niño de ser eliminado es utilizar QSplitter.takeWidget (niño). Esta es también la forma recomendada de eliminar el widget de un divisor. (Documentación Qt)

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