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 :

Comment donner une taille en pourcentage à un widget par rapport au layout ?


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 68
    Par défaut Comment donner une taille en pourcentage à un widget par rapport au layout ?
    Hello

    Je suis sous Qt Creator et je voudrais donner une taille relative à 2 objets dans un layout. Par exemple, en mettant 2 instances d'un QWidget personnalisé, je voudrais que le premier fasse 20% du layout et le second 80%, quelque soit la taille du layout.
    Malheuresement je n'ai pas trouvé malgré quelques bidouilles sous Creator et dans la doc de QWidget.

    Je vous remercie d'avance si vous avez une piste.

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 163
    Billets dans le blog
    153
    Par défaut
    Bonjour,

    Une idée serait de récupéré la taille du layout (http://qt.developpez.com/doc/latest/....html#geometry), et après de calculé 20 pourcents de cette taille à l'objet. Les 80 autre pourcents à l'autre objet.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    Bonjour

    Il faut normalement utiliser QSizePolicy :
    - http://qt.developpez.com/doc/latest/...tretch-factors
    - http://qt.developpez.com/doc/latest/...izepolicy-prop
    - http://qt.developpez.com/doc/latest/...izontalstretch

    Exemple :
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    #include <QtGui/QApplication>
    #include <QtGui/QMainWindow>
    #include <QHBoxLayout>
    #include <QPushButton>
     
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
     
        QHBoxLayout* l = new QHBoxLayout();
     
        QPushButton* b1 = new QPushButton("text 2");
        QSizePolicy sp(QSizePolicy::Expanding, QSizePolicy::Fixed);
        sp.setHorizontalStretch(1);
        b1->setSizePolicy(sp);
        l->addWidget(b1);
     
        QPushButton* b2 = new QPushButton("text 2");
        QSizePolicy sp2(QSizePolicy::Expanding, QSizePolicy::Fixed);
        sp2.setHorizontalStretch(2);
        sp2.setVerticalStretch(2);
        b2->setSizePolicy(sp2);
        l->addWidget(b2);
     
        QWidget* w = new QWidget();
        w->setLayout(l);
     
        QMainWindow mw;
        mw.setCentralWidget(w);
        mw.show();
     
        return a.exec();
    }
    Bon courage

  4. #4
    Membre confirmé
    Inscrit en
    Octobre 2005
    Messages
    68
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 68
    Par défaut
    Tout d'abord, merci à vous 2.
    La second solution me semble la meilleure, car après avoir déterminé ce que j'appelerais des "poids", le dimensionnement est automatique.
    La doc me semble pas super explicite, donc voici, des fois que ça aide quelqu'un, une petite explication.

    2 boutons de 50% :
    sp1.setHorizontalStretch(50);
    sp2.setHorizontalStretch(50);

    3 boutons de respectivement 25, 25, et 50%:
    sp1.setHorizontalStretch(25);
    sp2.setHorizontalStretch(25);
    sp3.setHorizontalStretch(50);

    C'est tout bête en fait ^^

    Merci à vous !

  5. #5
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    En faite le strech c'est pas évident à comprendre.
    J'avais jamais penser à faire en sorte que la somme des poids soit 100

    Un strech c'est un poids de proportion.
    Quand plusieurs widget son dans un layout, le calcule du facteur de proportion est d'un widget est
    poids /(Somme des poids )

Discussions similaires

  1. Comment définir une taille de police ?
    Par gloglo dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 27/01/2007, 03h49
  2. Donner une taille fixe à un widget GTK
    Par gwenhael dans le forum GTK+
    Réponses: 3
    Dernier message: 26/06/2006, 14h59
  3. Comment donner une hauteur fixe à un tableau ou une page?
    Par debilemaniac dans le forum Balisage (X)HTML et validation W3C
    Réponses: 6
    Dernier message: 31/05/2006, 16h22
  4. Réponses: 1
    Dernier message: 03/05/2006, 10h49

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