Comment supprimer QWidgets de QSplitter
Question
Dans mon application une fenêtre par une fente QSplitter, et je dois supprimer un gadget.
Comment puis-je faire cela? Je ne peux pas trouver des méthodes utiles
La solution
Beaucoup de choses dans Qt ne peuvent pas être « traditionnellement » enlevé. Au lieu de cela appeler hide () sur elle et destructives il. De QSplitter documentation:
Lorsque vous masquez () un enfant de son espace sera être réparti entre les autres Enfants. Il sera rétabli lorsque vous montrer () à nouveau.
Autres conseils
Il est pas clair pour moi si vous voulez conserver le widget et le mettre ailleurs, ou si vous voulez détruire le widget.
-
Détruisant le widget: Si vous pouvez obtenir un pointeur sur le widget, vous pouvez supprimer tout simplement. Le séparateur sera en toute sécurité être informé que son enfant suppression et le supprimera de lui-même.
-
Préserver le widget: Si vous prenez le pointeur sur le widget, vous pouvez simplement mettre son parent à un autre widget et l'ajouter à une autre La mise en page du widget et il sera affiché Là. C'est sûr parce que la QSplitter sera avisé qu'un de ses enfants est en cours reparented.
Si vous souhaitez définir le parent à NULL (la réponse de cjhuitt) sachez que vous êtes responsable du nettoyage que la mémoire parce que le widget ne possède plus d'un parent.
J'aime la réponse de Tuminoid. Mais si vous avez besoin absolument retiré, essayez d'obtenir le widget que vous souhaitez supprimer, et d'appeler sur ce widget setParent( NULL )
. C'est ma meilleure estimation.
Si vous maintenez un pointeur sur le widget, puis juste le supprimer, ou utilisez deleteLater () si vous voulez être du bon côté.
Si vous ne possédez pas le pointeur widget, utilisez la fonction QSplitter :: widget (int index). Ensuite, vous pouvez utiliser invoquer son emplacement deleteLater ().
Si vous n'avez pas l'index widget, mais vous savez toujours le objectName widget (), puis QObject :: findChild () est votre seul moyen d'obtenir le pointeur widget.
Je suis tombé sur le même problème. Dans Qt 4.8 pour cacher un temporellement du widget d'un QSplitter je cache tout simplement. Cependant, il ne suffit pas, comme la poignée de séparation est toujours disponible pour se déplacer. Mais la poignée est accessible et caché ainsi:
frameA->setVisible(conditionA);
frameB->setVisible(conditionB);
if ( !(conditionA && conditionB) ) // if only 1 frame is visible
{
splitter->handle(0)->setVisible(false);
}
Une autre façon facile d'empêcher le widget enfant de se supprimer est d'utiliser QSplitter.takeWidget (enfant). Ceci est également la méthode recommandée pour enlever le widget d'un séparateur. (Qt Documentation)