Dans mon application ont une fenêtre divisée par un QSplitter, et j'ai besoin de supprimer un widget.Comment faire pour supprimer QWidgets de QSplitter
Comment puis-je faire cela? Je ne trouve pas de méthodes utiles
Dans mon application ont une fenêtre divisée par un QSplitter, et j'ai besoin de supprimer un widget.Comment faire pour supprimer QWidgets de QSplitter
Comment puis-je faire cela? Je ne trouve pas de méthodes utiles
Beaucoup de choses dans Qt ne peuvent pas être "traditionnellement" supprimées. Au lieu de cela, appelez hide() dessus et détruisez-le. De la documentation QSplitter:
Lorsque vous masquez() un enfant son espace sera réparti entre les autres enfants. Il sera rétabli quand vous le montrerez à nouveau().
J'aime la réponse de Tuminoid. Mais si vous en avez absolument besoin supprimé, essayez d'obtenir le widget que vous souhaitez supprimer, et appelez setParent(NULL)
sur ce widget. C'est ma meilleure estimation.
Ce n'est pas clair pour moi si vous voulez préserver le widget et le mettre ailleurs, ou si vous voulez détruire le widget.
le widget Destruction: Si vous pouvez obtenir un pointeur sur le widget, vous pouvez supprimer tout simplement. Le séparateur sera averti en toute sécurité que son enfant est en cours de 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 à la mise en page d'un autre widget et montrerez là . Ceci est sûr car le QSplitter sera notifié qu'un de ses enfants est réparé.
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.
Si vous avez un pointeur sur le widget, supprimez-le ou utilisez deleteLater() si vous voulez être du bon côté.
Si vous n'avez pas le pointeur de widget, utilisez la fonction QSplitter :: widget (index). Ensuite, vous pouvez utiliser son slot deleteLater().
Si vous n'avez pas l'index du widget, mais que vous connaissez toujours le widget objectName(), alors QObject :: findChild() est votre seul moyen d'obtenir le pointeur du widget.
Un autre moyen facile d'empêcher la suppression du widget enfant consiste à utiliser QSplitter.takeWidget (child). C'est aussi la manière recommandée de retirer le widget d'un séparateur. (Documentation Qt)
fournir un lien vers doc pour takeWidget. – W55tKQbuRu28Q4xv
J'ai rencontré le même problème. Dans Qt 4.8 pour masquer temporairement l'un des widgets d'un QSplitter je le cache simplement. Cependant, cela ne suffit pas, car la poignée du séparateur 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);
}
Notez que lorsque vous définissez le parent NULL votre widget devient une fenêtre principale ... (sauf si vous le cacher en premier.) –