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 :

Taille avec QSplitter


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    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 Taille avec QSplitter
    Bonjour,
    Je suis sous QtDesigner et je voudrais d'un côté plusieurs widgets les uns en dessous des autres, de l'autre côté une zone de texte. Le tout redimensionnable, j'ai donc utiliser des QSplitter.
    Donc un premier splitter vertical contenant mes widgets, puis un splitter horizontal contenant le premier splitter et la zone de texte. Ca fonctionne, mais par défaut le splitter contenant mes widgets prend les 2/3 de la largeur alors que j'aurais plutôt préféré 1/4. Les widgets qu'il contient n'ont pas besoin d'autant d'espace (ils sont étirés à au moins 2x leur taille normale). J'ai changé les SizePolicy de mes widgets qui étaient en expanding pour les mettre en prefered sans succès. La zone de texte est depuis le début en expanding mais reste "poussée" par mon splitter interne.

    Si quelqu'un a des astuces je suis preneur ! Merci

  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
    Je viens de découvrir l'attribut "stretch" que je n'avais jamais utilisé. Ça m'a permis de forcer les dimensions que je voulais.

    Par contre j'ai lu :
    Citation Envoyé par yan Voir le message
    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 )
    Or dans mon cas (un QSplitter horizontal contenant un QSplitter (à gauche) et un QWidget (à droite)), j'ai dû mettre le stretch à 1 pour l'élément à gauche et à 12 pour l'élément à droite pour obtenir que l'élément gauche prenne à peu près 1/4 de la largeur.

  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
    Tu as une fonction setStretchFactor dans QSplitter qui est utilisé pour déterminer la taille des widgets :
    stretch is not the effective stretch factor; the effective stretch factor is calculated by taking the initial size of the widget and multiplying it with stretch.
    The initial distribution of size between the widgets is determined by multiplying the initial size with the stretch factor. You can also use setSizes() to set the sizes of all the widgets.
    (http://qt.developpez.com/doc/latest/...tstretchfactor)

  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
    Comme la taille des widgets contenus est indéterminée avec un QSplitter (sauf si on la fixe), le résultat du stretch le sera aussi. Il faudrait fixer les tailles de tous les widgets contenus avant d'appliquer le stretch pour savoir... Pour ma part je passe par le Designer, donc ces deux propriétés du QSplitter ne sont pas accessibles.

  5. #5
    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
    Si, ça fonctionne :
    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
    MainWindow::MainWindow(QWidget *parent)
        : QMainWindow(parent)
    {
        setWindowTitle("test");
        resize(600,200);
        move(200,200);
     
        QSplitter* s = new QSplitter();
     
        s->addWidget(new QPushButton("texte 1"));
        s->addWidget(new QPushButton("texte 2"));
        s->addWidget(new QPushButton("texte 3"));
     
        s->setStretchFactor(0, 1);
        s->setStretchFactor(1, 2);
        s->setStretchFactor(2, 3);
     
        setCentralWidget(s);
    }
    Par contre, il ne faut pas oublier de donner une taille initiale plus grande que la taille minimale, sinon la fenêtre et les widgets prennent leurs sizeHint (et sont donc tous de la même taille)
    Images attachées Images attachées  

  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
    Oui enfin dans cet exemple tu as 3 widgets de même types donc à priori à la base ils auront tous la même taille. Dans mon cas sans rien changer mon splitter contenant redimensionne les éléments contenus de manière pas du tout équitable, donc j'imagine que le stretch ensuite est faussé.

    Car dans la doc il est bien écrit que la fonction setStretchFactor est équivalente à modifier le stretch directement sur le widget.

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

Discussions similaires

  1. Limitation de taille avec XMLTYPE
    Par lilas14 dans le forum SQL
    Réponses: 9
    Dernier message: 24/03/2014, 15h26
  2. comment faire pour la cellule desside de ça taille avec les
    Par JAVA Good dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 18/02/2006, 15h37
  3. probleme de taille avec sql server 2000
    Par sergio122 dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 13/02/2006, 09h57
  4. Problème de taille avec les tables
    Par Angelico dans le forum Paradox
    Réponses: 2
    Dernier message: 27/12/2004, 18h38
  5. Prob de taille avec Jlabel
    Par Stef784ever dans le forum Composants
    Réponses: 6
    Dernier message: 03/08/2004, 13h34

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