Cacher widget Qt et de garder le widget de l'espace
Dans une forme simple, j'ai fait un peu de boutons et de mettre une mise en page horizontale. Lorsque la souris quitte la zone de l'un des boutons, la dernière, doit être cachée. À l'aide du bouton->hide (), il fonctionne, mais tous les boutons sont réorganisées par le gestionnaire de présentation. Ce que je veux, c'est que tous les autres boutons de continuer dans leurs positions. J'ai essayé de remplacer le widget avec un widget place de titulaire et d'échanger sur le bouton et de l'espace réservé hide () et show(), l'appel de l'espace réservé->resize(bouton->size()), mais le layout manager ne respectent pas les redimensionner et de l'espace réservé est réglé à sa taille minimale. Quelle est la meilleure façon de supprimer un widget et de garder son espace?
OriginalL'auteur humberto | 2009-12-09
Vous devez vous connecter pour publier un commentaire.
Dans Qt 5.2, il est possible d'effectuer les opérations suivantes:
J'ai posté la même solution ici:
Comment faire un widget Qt invisible sans changer la position de l'autre Qt widgets?
(ce qui semble être un doublon de cette question).
OriginalL'auteur
Essayer d'intégrer votre widget dans un QStackWidget avoir 2 pages:
* votre widget(s) sur une seule page
* une autre page vide
Courant qstackwidget page à la page vide lorsque vous souhaitez masquer votre widget. Et revenir à votre page d'accueil pour afficher l'arrière de votre widget(s).
OriginalL'auteur
J'ai eu le même problème.
J'ai fini par l'ajout d'un HorizontalSpacer (ma mise en page a été horizontal), qui au départ, j'ai mis à 0 de taille et de taille Fixe de la politique. Ensuite, j'ai utilisé:
Pour remplir l'espace. De même, vous pouvez redimensionner l'entretoise à la taille du bouton et de le garder aussi Fixe QSizePolicy.
OriginalL'auteur
Vous pouvez essayer de mettre le bouton cacher à l'intérieur d'un autre widget, et d'essayer de faire autre widget garder sa taille correctement lorsque le bouton est caché. Cela pourrait être un peu difficile. Un QStackedWidget a été suggéré, et pourrait être le chemin à parcourir... ce serait semblable à la QWidget wrapper, à l'exception de dimensionnement peut être plus facile.
Une autre option que vous pourriez regarder, c'est l'insertion d'une entretoise pour l'espace réservé, et le réglage de la cale pour une taille fixe qui est le bouton de la taille. (Vous aurez besoin de mettre à jour la taille lorsque le bouton de changement de taille). Vous devriez être en mesure d'afficher/masquer les en paires et de le faire fonctionner comme vous vous attendez.
OriginalL'auteur
Je voudrais aussi essayer d'installer un filtre d'événement qui remplace la peinture d'origine de l'événement, le dessin d'un fond transparent, et ignore la plupart des événements que le widget ne doit pas répondre quand il est invisible (probablement tous d'entre eux, à l'exception de
QResizeEvent
). Lorsque le widget devient visible, retirez le filtre d'événement.Voir
QObject::installEventFilter(QObject*)
etQObject::removeEventFilter(QObject*)
.OriginalL'auteur
Essayer de mettre la touche que vous souhaitez masquer et afficher dans une autre mise en page. Dans cette mise en page avec le bouton mettre une entretoise. Bouton d'appel masquer et l'entretoise va prendre le dessus.Entretoise prend plus de boutons cachés de l'espace. D'autres boutons continuent d'occuper le même espace.
OriginalL'auteur
Une façon simple de le faire est de fixer le minimum de la taille de l'endroit titulaire widget au lieu de redimensionnement. Bien que la taille du widget n'est pas respecté par les mises en page, la taille minimale est de.
OriginalL'auteur
Probablement la façon la plus simple de le faire est de fixer la taille maximale des boutons de la taille de la pointe.
Cela devrait maintenir les boutons visibles de la même taille et ne pas les forcer à développer lorsque l'autre est caché. Vous aurez besoin de prendre soin que si vous modifiez le texte sur les boutons, vous de réinitialiser leur taille maximale, mais il est probable que vous ne faites cela en un seul endroit de toute façon. Je crois que quelque chose comme cela a été fait dans un des premiers chapitres de l'intervalle Qt livre (mais je ne l'ai pas en face de moi, donc je ne peux pas vous pointer au bon endroit).
OriginalL'auteur
Je ne sais pas si c'est le meilleur moyen, mais résolu ce problème à l'aide d'un QStackedWidget pour envelopper le bouton.
OriginalL'auteur