IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Discussion :

Layout : addWidget() puis sizeHint()

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 133
    Par défaut Layout : addWidget() puis sizeHint()
    Bonjour à tous,

    J'ai actuellement un layout définit dans l'ui et je quand je change une combobox je lui ajoute des widgets. Ce layout est contenu dans un scrollarea que je redimensionne en fonction de la taille du layout.

    Problème la fonction sizehint().heiget() que j'utilise après mon addwidget ne prend pas en compte le widget ajouté. Voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
        switch (ui -> cbChooseMaintenance -> currentIndex())
        {
            case 0:
                    break;
            case 1:
                    ui -> fReplacementArm -> setVisible(true);
                    ui -> vlCurativeMaintenance -> addWidget(ui -> fReplacementArm);
                    break;
            case 2:
                    ui -> fReplacementController -> setVisible(true);
                    ui -> vlCurativeMaintenance -> addWidget(ui -> fReplacementController);
                    break;
            case 3:
                    ui -> fReplacementMechanical -> setVisible(true);
                    ui -> vlCurativeMaintenance -> addWidget(ui -> fReplacementMechanical);
                    break;
            default:
                    break;
     
     
        }
        ui -> vlCurativeMaintenance -> update();
        ui -> sawcCurativeMaintenance -> setFixedHeight(10 + ui -> vlCurativeMaintenance -> sizeHint().height());
    il faut donc j'ajoute 2 fois la même maintenance pour voir la scroll area j'agrandir.

    Merci pour vos lumières

  2. #2
    Membre éprouvé
    Avatar de ymoreau
    Homme Profil pro
    Ingénieur étude et développement
    Inscrit en
    Septembre 2005
    Messages
    1 154
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur étude et développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 154
    Par défaut
    Souvent quand il y a un décalage entre les dimensions que tu utilises dans le code et les vraies dimensions des widgets, c'est que ton code est exécuté avant la mise à jour graphique de ton appli.

    En faisant un qDebug sur sizeHint().height() juste après ton switch, tu aurais des détails. Mais je pense que à ton premier changement, la valeur n'a pas encore été mise à jour et donc ton redimensionnement n'a aucun effet (puisqu'il se base sur l'ancienne taille). Et qu'au second changement il prend finalement en compte la taille de ton premier changement.

    Essaye d'appeler flush (ou bien peut être processEvents) après avoir modifié l'ui, et avant d'utiliser les valeurs de dimension (sizeHint, heigth etc).

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 133
    Par défaut
    En effet ton analyse est tombée pile poil dans le mille !!

    Flush ne résout pas le problème en revanche un petit processEvent fonctionne !!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QApplication::processEvents()
    Un grand merci à toi.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Remplir des ImageView dans un layout puis convertir ce layout
    Par aristide13 dans le forum Composants graphiques
    Réponses: 3
    Dernier message: 23/01/2014, 12h48
  2. Layout : addWidget() puis sizeHint() (bis)
    Par Kermichou dans le forum Qt
    Réponses: 1
    Dernier message: 04/09/2012, 16h39
  3. [Débutant][swt][layout]
    Par Stessy dans le forum SWT/JFace
    Réponses: 2
    Dernier message: 28/07/2003, 18h21
  4. comment puis-je recupérer l'extesion du fichier?
    Par mirella dans le forum Langage
    Réponses: 7
    Dernier message: 14/08/2002, 15h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo