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 :

Affichage bizarre avec QGridLayout [Graphics View]

  1. #1
    Membre confirmé Avatar de Tom487
    Homme Profil pro
    Étudiant informatique
    Inscrit en
    Avril 2011
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 111
    Par défaut Affichage bizarre avec QGridLayout
    Bonjour à tous.

    Je suis en train de coder un labyrinthe pour y implémenter des algo d’intelligence artificielle et je bloque sur la partie graphique...
    Si vous désirez voir quel est le bug, vous pouvez le constater avec la pièce jointe.

    En ce qui concerne l'explication, j'utilise un QGridLayout qui contient une classe créer par mes soins héritant de QLabel avec un QPainter à l'intérieur pour dessiner les carrés.
    Voici une partie du code :
    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
    34
    35
    36
    37
    38
    39
    40
    41
     
    lab = new Labyrinthe(tailleX, tailleY, coordXRobot, coordYRobot);
     
            gridLayout->setSpacing(0);
            gridLayout->setMargin(0);
            gridLayout->setContentsMargins(0, 0, 0, 0);
    // C'est cette ligne qui provoque le bug, mais sans elle, mes cases du gridLayout ne sont pas collé entre elles.
            gridLayout->setSizeConstraint(HeritQLayout::SetFixedSize);
     
            // Faire boucle de création de laby
            // On inverse x et y car on affiche les lignes une par une en les lisant
            for(int y = 0; y < tailleY ; y++)
            {
                gridLayout->setRowMinimumHeight(y,20);
                for(int x = 0 ; x <tailleX ; x++)
                {
                    gridLayout->setColumnMinimumWidth(x,20);
                    in >> valeurLu;
                    // Chemin
                    if (valeurLu == 0)
                    {
                        carreBlanc.push_back(new ZoneDessin(ui->labyrinthe, 0, 0, 255, 255, 255));
                        // On ajoute le dernier carre créer au grid layout du widget labyrinthe
                        gridLayout->addWidget(*(carreBlanc.end()-1),x,y,1,1);
                    }
                    else if (valeurLu == 1) //mur
                    {
                        carreNoir.push_back(new ZoneDessin(ui->labyrinthe,0, 0, 0, 0, 0));
                        // On ajoute le dernier carre créer au grid layout du widget labyrinthe
                        gridLayout->addWidget(*(carreNoir.end()-1),x,y,1,1);
                    }
                    else if (valeurLu == -1)
                    {
                        ZoneDessin *p = new ZoneDessin(ui->labyrinthe, 0, 0, 255, 0, 0);
                        // Et l'ajoute au grid layout du widget labyrinthe
                        gridLayout->addWidget(p,x,y,1,1);
                    }
     
                }
            }
            ui->labyrinthe->setLayout(gridLayout);
    Voila, j'espère avoir été clair, n'hésitez pas à me poser des questions et merci pour votre futur aide.
    Images attachées Images attachées  

  2. #2
    Membre éclairé
    Inscrit en
    Mars 2011
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 50
    Par défaut
    Hello

    ZoneDessin est un widget si tu lui mets une taille ? display block ?

    ui->labyrinthe est-il assez grand ? (taille fixe ?) et c'est quel type d'élément (je mise sur un grid layout :p)?

    si tu agrandis / rétréci la fenêtre quelque chose change ?

    sinon que te retourne http://harmattan-dev.nokia.com/docs/...mnMinimumWidth ?

    sinon créer un widget vide et lui coller le grid layout dessus

    je vois pas trop faut faire quelques tests

    bonne chance

  3. #3
    Membre confirmé Avatar de Tom487
    Homme Profil pro
    Étudiant informatique
    Inscrit en
    Avril 2011
    Messages
    111
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 111
    Par défaut
    Bonsoir .

    ZoneDessin a une taille de 10 pixels :
    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
    34
     
    #include "zonedessin.h"
     
    #include <QRect>
     
    ZoneDessin::ZoneDessin(QWidget *parent, int x, int y, int r, int g, int b)
        : QLabel(parent), x(x), y(y)
    {
        setStyleSheet("background-color:rgb(255, 255, 255); margin:0;padding:0;margin:0");
        qcolor = new QColor(r, g, b, 200);
    }
     
    ZoneDessin::~ZoneDessin()
    {
     
    }
     
    void ZoneDessin::paintEvent(QPaintEvent *) {
     
        QPainter painter(this);
     
        // Définit de la couleur de fond
        painter.setBrush(*qcolor);
     
        // Définition de la variable
        QRect myRect(x, y, 20, 20);
     
     
        // On dessine le polygone définit plus haut
        painter.drawPolygon(myRect, Qt::WindingFill);
     
        painter.end();
     
    }
    ui->labyrinthe est assez grand, il fait 630 par 400 environ, mais c'est un QWidget par contre, pas un layout.
    Je suis débutant en IHM, je viens de me poser la question si un QWidget est adéquat pour contenir d'autre widgets, ou si une frame serait pas plus appropriée ?

    Si j'agrandis ou que je rétrécis ma fenêtre, rien ne change car je n'ai pas lié le tout avec un layout, juste une grande frame qui contient tout le reste.

    Bon ben j'était en train de te répondre point par point mais plus besoin. Grâce à ton idée de regarder avec le getMinimumsize la taille, j'ai pus constater que j'avais un problème à ce niveau là. Donc j'ai modifié un peu mon code, et miracle ça marche.
    Pour informations, l’erreur était dans la lecture de fichier que je n'avais pas vérifié croyant qu'elle était bien faite -_-".
    Vu que je n'aime pas faire les IHM, je me suis dis que j'avais chier quelque chose dans l'IHM et pas dans le reste...
    M'enfin, merci et bonne soirée !

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

Discussions similaires

  1. Affichage bizarre avec Windows8
    Par kerinel dans le forum Interfaces Graphiques en Java
    Réponses: 0
    Dernier message: 21/04/2014, 22h47
  2. [WB18] Comportement bizarre avec IE9 - affichage page interne
    Par fdelepine dans le forum WebDev
    Réponses: 1
    Dernier message: 23/12/2013, 00h43
  3. Affichage bizarre border avec le scroll
    Par koyot3 dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 09/06/2011, 16h23
  4. Réponses: 0
    Dernier message: 28/07/2010, 10h57
  5. problèmes bizarres avec jdbc
    Par jaimepasteevy dans le forum PostgreSQL
    Réponses: 8
    Dernier message: 12/12/2003, 12h00

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