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 :

probleme actualisation affichage !


Sujet :

Qt

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 11
    Par défaut probleme actualisation affichage !
    salut a tous !
    voilà j'ai un probleme , j'affiche une map(quadrillage avec des chiffres) et quand j'appuie sur une touche , je veux que les chiffres changent (je change les chiffres de mon tableau en fait) , le probleme c'est que quand je lance le programme , rien ne se passe quand j'appuie sur les touches
    le code est là (en partie) :
    ma fonction qui gere les touches clavier
    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     
    void Terrain::pressEvent( QKeyEvent * event )
    {
        int x;
        int y;
            switch(event->key())
            {
                case Qt::Key_Up :
                        event->accept();
                        y = liste->getY();
                        x = liste->getX();
                        terrain[(x*longueur)+y] = 0;
                        y--;
                        liste->setY(y);
                        terrain[(x*longueur)+y] = 3;
                        salut++;
                break;
     
                case Qt::Key_Down :
                        event->accept();
                        y = liste->getY();
                        x = liste->getX();
                        terrain[(x*longueur)+y] = 0;
                        y++;
                        liste->setY(y);
                        terrain[(x*longueur)+y] = 3;
                        salut--;
                   break;
     
                case Qt::Key_Left :
                        event->accept();
                        y = liste->getY();
                        x = liste->getX();
                        terrain[(x*longueur)+y] = 0;
                        x--;
                        liste->setX(x);
                        terrain[(x*longueur)+y] = 3;
                break;
     
                case Qt::Key_Right :
                        event->accept();
                        y = liste->getY();
                        x = liste->getX();
                        terrain[(x*longueur)+y] = 0;
                        x++;
                        liste->setX(x);
                        terrain[(x*longueur)+y] = 3;
                break;
            }
            update();
    }
    ma fonction qui gere l'affichage
    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
     
    void Terrain::paintEvent(QPaintEvent *)
    {
        QPainter paint(this);
        paint.setPen( QColor(Qt::transparent));
        for (int i = 0 ; i < largeur ; i++)
        {
            for (int j = 0 ; j < longueur ; j++)
            {
                switch(terrain[(i*longueur)+j])
                {
                    case 0:
                    {
                        QImage image1("images/terrain_vide.bmp");
                        paint.drawImage( QPoint( i*60,j*60 ), image1);
                    }
                    break;
                    case 1:
                    {
                        QImage image2("images/arbre.bmp");
                        paint.drawImage( QPoint( i*60,j*60 ), image2);
                    }
                    break;
                    case 2:
                    {
                        QImage image3("images/rocher.bmp");
                        paint.drawImage( QPoint( i*60,j*60 ), image3);
                    }
                    break;
                    case 3:
                    {
                        QImage image4("images/tank.bmp");
                        paint.drawImage( QPoint( i*60,j*60 ), image4);
                    }
                    break;
                }
            }
        }
        QPen pen( QColor(Qt::red));
        QFont font;
        font.setStyleHint(QFont::Serif);
        font.setPointSize(16);
        pen.setWidth(50);
        paint.setPen( pen);
        paint.setFont(font);
        paint.drawText(10, 650, "Y = " + QString::number( liste->getY()+1 ) );
        paint.drawText(10, 630, "X = " + QString::number( liste->getX()+1 ) );
        paint.drawText(10, 670, "Salut = " + QString::number( salut ) );
        for (int i = 0 ; i < largeur ; i++)
        {
            for (int j = 0 ; j < longueur ; j++)
            {
                paint.drawText(30+(j*60) , 30+(i*60),QString::number(terrain[j*longueur+i]));
            }
        }
        update();
    }
    si quelqu'un sait quoi faire , dites le moi s'il vous plait , parce que je peux plus avancer là j'ai tout essayé !

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Par défaut
    Il existe la méthode "repaint()" qui fait appel a paintEvent.
    Rajoute cette méthode dans ta gestion d'appui sur la touche.

    Voila la doc Qt :
    void QWidget::repaint () [slot]
    Repaints the widget directly by calling paintEvent() immediately, unless updates are disabled or the widget is hidden.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 11
    Par défaut
    merci beaucoup , je connaissais pas cette fonction repaint() , tres pratique

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Par défaut
    Pas de problème.
    La Doc Qt est très bien réalisée, n'hésite pas à y jeter un œil de temps en temps

    Cordialement,
    PKO

  5. #5
    Membre Expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Par défaut
    Salut,

    Il faut préférer update() à repaint(). Elle a l'avantage de grouper les événements de dessin, et selon les cas c'est bien mieux (pas de repaint intempestif). Et si c'est pas mieux, c'est pareil, donc...

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    223
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 223
    Par défaut
    Mastertricard semble déjà utiliser update() dans son code. Malgré ça, ça ne s'actualise pas

  7. #7
    Membre Expert

    Avatar de IrmatDen
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 727
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 727
    Par défaut
    Pardon, j'avais pas assez lu. Il est aussi appelé dans le paintEvent, ce qui est inutile. Le widget a bien le focus ? (Il faut expliciter ce qu'on veut comme focus pour les widgets perso par la fonction QWidget::setFocusPolicy, souvent avec la valeur Qt::StrongFocus).

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

Discussions similaires

  1. Probleme d'affichage, d'actualisation?
    Par mattiew dans le forum Android
    Réponses: 6
    Dernier message: 03/06/2015, 11h46
  2. [VB.NET] Probleme d'affichage de controle
    Par mic56 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 09/06/2004, 15h03
  3. xml-xsl-fo : probleme d'affichage d'un tableau
    Par clindoeil dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 12/12/2003, 12h46
  4. [langage] Problème d'affichage
    Par marcoss dans le forum Langage
    Réponses: 3
    Dernier message: 29/08/2003, 13h05
  5. IE [Applet] Plug-in problème d'affichage
    Par Tonton Luc dans le forum JBuilder
    Réponses: 4
    Dernier message: 19/06/2003, 08h28

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