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 :

Utilisation de QSizePolicy et des layouts

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Etudiant CNAM (DIE20)
    Inscrit en
    Janvier 2010
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant CNAM (DIE20)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 151
    Par défaut Utilisation de QSizePolicy et des layouts
    Bonsoir,

    Je cherche à obtenir une fenêtre à onglets dont le contenu des onglets occupe tout l'espace disponible. En lisant la doc, j'ai cru comprendre que QSizePolicy était la solution, mais je n'arrive pas à la mettre en œuvre... J'ai une erreur qui me dit que QSizePolicy est privé.

    /usr/include/qt4/QtGui/qsizepolicy.h:200: error: ‘QSizePolicy::QSizePolicy(int)’ is private
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        QTabWidget *onglets = new QTabWidget(this);
        onglets->setSizePolicy(QSizePolicy(QSizePolicy::Expanding));
    Pouvez-vous m'éclairer de vos lumières en cette heure sombre et tardive ??

    EDIT :
    plus d'erreur en déclarant ainsi, mais le contenu de mes onglets est quasi totalement masqué...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        QTabWidget *onglets = new QTabWidget(this);
        QSizePolicy test;
        test.setHorizontalPolicy(QSizePolicy::Expanding);
        test.setVerticalPolicy(QSizePolicy::Expanding);
        onglets->setSizePolicy(test);
    EDIT 2 : changement du titre au vu de la solution qui est en rapport avec les layout et non les QSizePolicy...

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Par défaut
    http://doc.qt.nokia.com/latest/qwidg...izePolicy-prop
    http://doc.qt.nokia.com/latest/qsize...#QSizePolicy-2

    Le constructeur ou la fonction ont deux paramètres, onglets->setSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding );. Je me faisais tout le temps avoir aussi...

    Sinon pour répondre à ta vraie question, qu'est-ce que tu entends par occuper tout l'espace disponible, par rapport à ce que t'as par défaut ? Parce que c'est toujours pareil, un onglet c'est un QWidget, tu lui ajoutes un layout et ce qu'il y a dedans prendra toute la place possible (penser aux marges). Entraine-toi avec Designer pour voir comment ça marche.

  3. #3
    Membre confirmé
    Homme Profil pro
    Etudiant CNAM (DIE20)
    Inscrit en
    Janvier 2010
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant CNAM (DIE20)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 151
    Par défaut
    Bonjour,

    Merci pour ton aide.

    Comme parfois une image vaut mieux qu'un long discours, voici ma fenêtre actuelle en pièce jointe.

    j'ai :
    - une fenetre principale (que j'ai définie dans une classe dérivée de QWidget et qui est appelée par le main.cpp), qui contient uniquement un QTabWidget qui lui même ne contient que 2 onglets.
    - chacun de ces 2 onglets sont implémentés dans des classes séparées dérivées de QWidget.
    - pour le premier onglet affiché sur l'image ci-jointe, tout est contenu dans une QFrame portant le doux nom de m_groupRep. Quand j'essaie d'appliquer le style pour forcer cette Qframe à utiliser tout l'espace disponible, rien ne se passe. Peut-être que je n'applique pas le setSizePolicy au bon objet ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        QSizePolicy *expandPolicy = new QSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);
        m_groupRep.setSizePolicy(*expandPolicy);
     
        m_groupRep.setLayout(&m_layoutGroupRep);
    Images attachées Images attachées  

  4. #4
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Par défaut
    Citation Envoyé par moi-même
    Parce que c'est toujours pareil, un onglet c'est un QWidget, tu lui ajoutes un layout et ce qu'il y a dedans prendra toute la place possible (penser aux marges)
    Donc aucun rapport (pour l'instant) avec la sizePolicy, il te faut définir le layout des onglets et ajouter m_groupRep dedans.
    Citation Envoyé par toi
    - chacun de ces 2 onglets sont implémentés dans des classes séparées dérivées de QWidget.
    => C'est dedans qu'il faut faire setLayout(new QVBoxLayout); puis layout()->addWidget(m_groupRep);.

  5. #5
    Membre confirmé
    Homme Profil pro
    Etudiant CNAM (DIE20)
    Inscrit en
    Janvier 2010
    Messages
    151
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant CNAM (DIE20)

    Informations forums :
    Inscription : Janvier 2010
    Messages : 151
    Par défaut
    Merci beaucoup pour ton explication. C'est plus clair maintenant.

    J'obtiens exactement le résultat voulu avec ce code à la fin de l'implémentation du constructeur de mon onglet.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        // layout de l'onglet
        QVBoxLayout *monLayout = new QVBoxLayout;
        monLayout->addWidget(&m_groupRep);
        setLayout(monLayout);
    À noter que je n'ai pas réussi à faire fonctionner le truc en reprenant exactement ta syntaxe (pas réussi à caser le addLayout). Il a fallu que je passe par la création d'un layout quelconque qu'ensuite j'ai utilisé pour le setLayout de l'onglet.
    Je veux bien un exemple de l'implémentation exacte du addLayout pour mieux comprendre si tu en as le temps.

  6. #6
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Par défaut
    Oui désolé c'est bien setLayout (addLayout c'est autre chose, comme addWidget mais pour les Layout), j'ai fait trop vite et de tête d'où l'erreur.

    Donc là c'est bon, et sizePolicy détermine le comportement des widgets par rapport aux autres et au layout, à l'intérieur de ce dernier. Le plus souvent on n'y touche pas.

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

Discussions similaires

  1. [C#] Utilisation des Layout
    Par Mister Nono dans le forum Débuter
    Réponses: 8
    Dernier message: 04/04/2012, 07h39
  2. Utilisation graphique des layouts
    Par Invité dans le forum Débuter
    Réponses: 22
    Dernier message: 24/05/2011, 13h29
  3. Utilisation des Layouts
    Par cashmoney dans le forum Agents de placement/Fenêtres
    Réponses: 13
    Dernier message: 02/02/2009, 20h20
  4. [ZF 1.7] Utilisation des "layouts"
    Par Feng-Huang dans le forum MVC
    Réponses: 14
    Dernier message: 16/01/2009, 10h01
  5. Utilisation des layout
    Par slake13 dans le forum Débuter
    Réponses: 5
    Dernier message: 14/11/2008, 11h48

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