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 :

Design d'un QMainWindow

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 9
    Par défaut Design d'un QMainWindow
    Bonjour à tous,

    je ne parviens pas à créer la fenêtre suivante:



    Quand on redimensionne la fenêtre je voudrais que le widget blanc se redimensionne aussi et que les boutons à gauche ne bouge pas de place.

    Voici comment j'ai procédés:

    - J'ai un QVBoxLayout qui contient un QSpacerItem et un QHBoxLayout
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    m_layoutV = new QVBoxLayout();
        m_layoutV->setAlignment(Qt::AlignTop);
        m_layoutV->setSpacing(0);
        m_layoutV->setMargin(0);
        m_layoutV->addItem(m_spacer);
        m_layoutV->addLayout(m_LayoutH);
    - Le spacer permet de laisser la place pour la bannière en haut de la fenêtre

    - Dans le QHBoxLayout (m_LayoutH) j'ai un QVBoxLayout et mon widget blanc.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    m_LayoutH = new QHBoxLayout();
        m_LayoutH->setAlignment(Qt::AlignLeft);
        m_LayoutH->setMargin(0);
        m_LayoutH->setSpacing(0);
        m_LayoutH->addLayout(m_layoutV2);
        m_LayoutH->addWidget(m_window);
    - Le QVBoxLayout (m_layoutV2) contient les boutons.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    m_layoutV2 = new QVBoxLayout();
        m_layoutV2->setAlignment(Qt::AlignLeft | Qt::AlignTop);
        m_layoutV2->addWidget(m_buttonCleaner);
        m_layoutV2->addWidget(m_buttonRegistry);
    - Pour finir je définit mon widget central:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    m_centralWidget = new QWidget();
        m_centralWidget->setLayout(m_layoutV);
        this->setCentralWidget(m_centralWidget);
    - La bannière se redimensionne comme suite:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void MainWindow::resizeEvent(QResizeEvent *event)
    {
        Q_UNUSED(event);
     
        m_banner->resize(width(), 57);
        m_banner->setScaledContents(true);
    }
    Maintenant, comment je peux garder mes boutons (m_layoutV2) en haut à gauche et mon widget blanc se redimensionne en fonction de la fenêtre ?

    Le redimensionnement de la fenêtre devrais donner cela:


    Merci par avance,

    Bonne journée.

  2. #2
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2010
    Messages
    248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2010
    Messages : 248
    Par défaut Stretch factor
    Bonjour,

    Si j'ai bien compris le problème, l'utilisation du Stretch Factor pourrait être la solution.

    Voici le code modifié (en rouge):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    m_layoutV = new QVBoxLayout();
        m_layoutV->setAlignment(Qt::AlignTop);
        m_layoutV->setSpacing(0);
        m_layoutV->setMargin(0);
        m_layoutV->addItem(m_spacer, 0);
        m_layoutV->addLayout(m_LayoutH, 1);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    m_LayoutH = new QHBoxLayout();
        m_LayoutH->setAlignment(Qt::AlignLeft);
        m_LayoutH->setMargin(0);
        m_LayoutH->setSpacing(0);
        m_LayoutH->addLayout(m_layoutV2, 0);
        m_LayoutH->addWidget(m_window, 1);
    Il faudra peut être jouer un peu avec les valeurs pour obtenir un résultat correct. Honnêtement je n'ai jamais réalisé ce genre d'interface.

    En espérant vous aider.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 9
    Par défaut
    Bonjour et merci beaucoup pour votre réponse.
    J'avais trouvé une autre solution.
    J'ai mis un QTabWidget pour mon carré blanc et j'ai rajouté ce code en bleu:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void MainWindow::resizeEvent(QResizeEvent *event)
    {
        m_banner->resize(width(), 57);
        m_banner->setScaledContents(true);
    
        m_tab->resize(width()-m_tab->pos().x()-5, height()-m_tab->pos().y()-10);
    
        QWidget::resizeEvent(event);
    }
    Cela marchait parfaitement et le QTabWidget contient les différentes pages (navigation par les boutons de gauche).
    Pour ne pas voir la barre d'onglet j'ai utilisé ce code qui permet de la cacher:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m_tab->tabBar()->hide();
    Je vais quand même tester votre code !

    Problème résolut, encore merci pour votre aide.

    Bonne soirée,

    Julien

  4. #4
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 272
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 272
    Par défaut résolu
    Ne pas oublier de marquer résolu, sinon les modérateurs ne vont pas être contents.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  5. #5
    Membre émérite
    Avatar de Daïmanu
    Homme Profil pro
    Développeur touche à tout
    Inscrit en
    Janvier 2011
    Messages
    736
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur touche à tout

    Informations forums :
    Inscription : Janvier 2011
    Messages : 736
    Par défaut
    Bonjour.

    Puisque tu utilises un QLayout, tu peux aussi passer par la méthode QWidget::setSizePolicy() pour indiquer au boutons de gauche d'avoir une largeur fixe, et au widget blanc d’être « expandable » en largeur.

    Ou alors définir un largeur fixe pour tes boutons de gauche.

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 24/02/2009, 12h06
  2. [power designer et Sybase] trigger
    Par mr_qno dans le forum Sybase
    Réponses: 4
    Dernier message: 12/07/2006, 18h32
  3. [OpenTools, designer] CmtSubComponent et superClasse
    Par kainor dans le forum JBuilder
    Réponses: 4
    Dernier message: 04/03/2003, 11h32
  4. Réponses: 3
    Dernier message: 09/02/2003, 01h09
  5. Désigner une variable avec une variable?
    Par littleman dans le forum Paradox
    Réponses: 4
    Dernier message: 12/08/2002, 11h21

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