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

Était-ce utile?

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)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top