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

Qt Discussion :

Limiter le redimensionnement d'un QLayout


Sujet :

Qt

  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 78
    Par défaut Limiter le redimensionnement d'un QLayout
    Bonsoir à tous

    J'essaies de créer une application MDI avec Qt.
    Mes sous fenêtres MDI hérite d'un widget que j'ai créé. Tout se passe bien pour le moment mais je me pose une question : est-il possible d'empêcher le redimensionnement vertical d'un QHBoxLayout ?
    J'ai parcouru la documentation mais je n'ai rien trouvé quisemble aller dans ce sens...

    Quelqu'un saurait-il comment faire ou, au moins, aurait une idée de la direction à prendre ?
    Merci d'avance pour votre aide.

  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
    Tu peux lui demander de ne pas (trop) s'agrandir en changeant la size-policy des widgets au dessous et au dessus de lui. Si c'est imposer une hauteur fixe que tu veux, c'est généralement pas très conseillé, mais tu as comme pour les widgets des dimensions min et max que tu peux spécifier.

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 78
    Par défaut
    Je ne comprends pas trop le principe de la sizePolicy... Je vais fouiller dans ce sens.
    Sinon effectivement, je me disais qu'imposer une dimension aux widgets (du moins à certains) était peut être une idée... Mais pourquoi n'est ce pas conseillé d'imposer une hauteur fixe aux widgets ? Je ne vois pas trop...

  4. #4
    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
    Tout dépend de ton appli je suppose, mais le principe des layouts est que Qt gère l'agencement graphique, et s'adapte aux changements de résolution, redimensionnement de fenêtre etc. En fixant des tailles en pixel, tu prends le risque d'être trop grand dans certains cas, que tes textes ne soient plus affichés en entier etc.

    Le concept de sizePolicy est bon, mais il arrive que ça ne donne pas du tout ce qu'on voulait, il faut un peu tâtonner parfois. Tu peux aussi ajouter des spacers pour "pousser" tes widgets, quand tu ne veux pas qu'ils prennent tout l'espace disponible.

  5. #5
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 78
    Par défaut
    Bon j'ai lu la doc de QSizePolicy... Je n'ai pas tout compris et les quelques tests que j'ai fait n'ont pas donné ce que je voulais, mais ce n'est pas trop grave.

    La fenêtre est en fait constituée d'un layout contenant un ensemble de widgets pour "éditer" une classe et, en dessous, un éditeur qui affiche le code de cette classe.
    J'aimerais que la partie "éditeur" prenne le minimum de place pour en laisser un maximum à l'editeur...

  6. #6
    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
    Régler les sizePolicy n'est pas toujours évident, car chaque widget va influencer les autres. Mais c'est vraiment ce qu'il y a de plus propre et générique à utiliser.
    Dans ton cas tu pourrais être intéressé par QSplitter, qui permet à l'utilisateur de redimensionner différentes "parties" de la fenêtre. Mais là les dimensions par défaut sont parfois surprenantes et les réglages assez hasardeux.

    J'ai déjà bidouillé un QSplitter avec un truc de ce genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    QList<int> sizes;
    sizes.append(250);
    sizes.append(710);
    ui.splitter->setSizes(sizes);
    ...car lorsqu'il est redimensionné, il garde la "proportion" des tailles qu'on lui a fixé au départ. Mais c'était vraiment à taton, et pas très propre.

    Tu peux aussi essayer de jouer avec le http://qt.developpez.com/doc/latest/...tretch-factors

  7. #7
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 111
    Par défaut
    bonjour,

    pourquoi ne pas faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tonWidget.setFixedHeight(tonLayout.sizeHint ().height())

  8. #8
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 78
    Par défaut
    Parce que, à moins que je ne me trompe, cela ne servirait qu'à "fixer" la hauteur de mon widgt, alors que c'est justement lui que je veux étendre...
    Et si, au contraire, il faut appliquer cela sur tous les widgets contenus dans le layout (de type QHBoxLayout) du dessus, et bien, ça risque d'être fastidieux...

  9. #9
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2007
    Messages : 111
    Par défaut
    Bonjour,
    regarde dans la doc http://qt.developpez.com/doc/latest/...tstretchfactor
    ça doit te convenir
    j'ai essayé ce bout de code, ça marche impec:
    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
     
    //******************
        QWidget *widget = split1->widget(0);
        QSizePolicy policy = widget->sizePolicy();
        policy.setHorizontalStretch(1);
        policy.setVerticalStretch(1);
        widget->setSizePolicy(policy);
        //******************
        widget = split1->widget(1);
        policy = widget->sizePolicy();
        policy.setHorizontalStretch(2);
        policy.setVerticalStretch(2);
        widget->setSizePolicy(policy);
        //******************
        widget = split1->widget(2);
        policy = widget->sizePolicy();
        policy.setHorizontalStretch(3);
        policy.setVerticalStretch(3);
        widget->setSizePolicy(policy);
        //******************

  10. #10
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Février 2010
    Messages
    243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2010
    Messages : 243
    Par défaut
    Pour que ton éditeur prenne la place maximale, tu dois lui mettre une sizepolicy à "expanding" et un strech factor positif (1 par exemple).

    S'il n'y a pas d'autre widgets en "expanding" ton éditeur de code prendra toute la place dispo.

  11. #11
    Membre confirmé
    Inscrit en
    Janvier 2008
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 78
    Par défaut
    Alors, me voilà de retour après une longue absence due à une couper intempestive de ma connexion...

    Merci à tous pour vos conseils !
    Mon widget a changé de place dans la sous-fenêtre MDI mais j'ai appris, grâce à vos conseils, à lui donner une dimension minimum, lui attribuer une politique de dimensionnement (QSizePolicy) et à jouer sur les facteurs d'étirements du layout dans lequel il est inséré.
    Il se comporte maintenant comme je le voulais !

    Encore une fois merci à tous pour votre temps et vos conseils !

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

Discussions similaires

  1. upload puis redimensionnement d'image limité à 2 Mo
    Par franckcl dans le forum Langage
    Réponses: 2
    Dernier message: 22/08/2010, 12h38
  2. Redimensionnement d'images uploadées limité à 600ko ?
    Par lenouvdu44 dans le forum Langage
    Réponses: 4
    Dernier message: 18/09/2008, 17h42
  3. full browser, limiter redimensionnement.
    Par zen art dans le forum ActionScript 1 & ActionScript 2
    Réponses: 1
    Dernier message: 05/11/2007, 00h59
  4. Redimensionner une JFrame avec valeur limite
    Par ppopov dans le forum Agents de placement/Fenêtres
    Réponses: 11
    Dernier message: 15/01/2006, 20h08
  5. limiter le redimensionnement d'une fenetre
    Par gaut dans le forum Windows
    Réponses: 3
    Dernier message: 20/12/2004, 11h56

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