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 :

Application qui ne veut pas dessiner


Sujet :

Qt

  1. #1
    Invité
    Invité(e)
    Par défaut Application qui ne veut pas dessiner
    Salut, j'ai codé une petite fenêtre qui affiche une ligne toute les 100 ms aafin de former un signe "+". Quand je compile tout ce passe impec, mais rien ne se passe, voici le 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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
     
    #include "MainWindow.h"
    #include "Mapscene.h"
    #include "MapView.h"
     
    MainWindow::MainWindow(QWidget* widgetParent) : QWidget(widgetParent)
    {
        this->setWindowTitle("Test_Qt");
        this->resize(200, 200);
     
        this->initMapScene();
        this->initMapView();
     
        QHBoxLayout* layout = new QHBoxLayout(this);
            layout->addWidget(vue);
     
        QTimer* timer = new QTimer(this);
            timer->setSingleShot(false);
            timer->setInterval(100);
     
        QObject::connect(timer, SIGNAL(timeout()), this, SLOT(drawWords()));
     
        this->setLayout(layout);
        this->show();
    }
     
    MainWindow::~MainWindow()
    {
     
    }
     
    bool MainWindow::initMapScene()
    {
        scene = new MapScene(this);
            QRectF surfacescene(-25, -25, 50, 50);
            scene->setSceneRect(surfacescene);
            QPointF pointOrigin(0, 0);
            scene->setPointOrigin(pointOrigin);
     
        return true;
    }
     
     
    bool MainWindow::initMapView()
    {
        vue = new MapView(scene, this);
            vue->setFixedSize(50, 50);
            vue->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
            vue->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
     
        return true;
    }
     
    void MainWindow::drawWords()
    {
        static int nbCall = 0;
        if (nbCall = 0)
        {
            QLineF line(0, 0, 0, 10);
            this->drawLine(line);
        }
        else if (nbCall = 1)
        {
            QLineF line(0, 0, -10, 0);
            this->drawLine(line);
        }
        else if (nbCall = 2)
        {
            QLineF line(0, 0, 0, -10);
            this->drawLine(line);
        }
        else if (nbCall = 3)
        {
            QLineF line(0, 0, 10, 0);
            this->drawLine(line);
        }
        else
        {
            QLineF line(0, 0, 0, 10);
            this->drawLine(line);
        }
    }
     
    void MainWindow::drawLine(QLineF &line)
    {
        QPointF linePoint1 = line.p1();
        QPointF linePoint2 = line.p2();
     
        QPointF point1 = scene->pointStandart(linePoint1);
        QPointF point2 = scene->pointStandart(linePoint2);
     
        QLineF line2(point1, point2);
        //QPen pen(Qt::blue, 5, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin);
        scene->addLine(line2);
    }
    Le compilateur me retourne 4 mises en garde cependant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    MainWindow.cpp: In member function 'void MainWindow::drawWords()':
    MainWindow.cpp:56: warning: suggest parentheses around assignment used as truth value
    MainWindow.cpp:61: warning: suggest parentheses around assignment used as truth value
    MainWindow.cpp:66: warning: suggest parentheses around assignment used as truth value
    MainWindow.cpp:71: warning: suggest parentheses around assignment used as truth value
    Je crois que c'est au niveau de drawWords() et de drawLine() qui sont tout les deux des slots... Merci pour aide.

  2. #2
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 694
    Points : 188 894
    Points
    188 894
    Par défaut
    Salut,

    Ton problème ne viendrait-il psa de ce genre de code (dans drawWords()) :
    Tu met la valeur 0 dans nbCall, tu ne vérifies pas que sa valeur est bien 0. Il faudrait plutôt écrire :
    Ça devrait t'enlever tes warnings.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Oh l'erreur de fou ! Non je vais me cacher, merci encore... Mais ça ne veut toujours pas dessiner... C'est peur-être le QTimer...

  4. #4
    Membre émérite
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 719
    Points : 2 793
    Points
    2 793
    Par défaut
    Bonjour,

    Pourrais-tu reposter ton code corrigé?

    Edit: vérifie que ta fonction drawWords est bien appelée

  5. #5
    Invité
    Invité(e)
    Par défaut
    Il n'y a pas de soucis, après tout il n'y a pas grand chose qui change :

    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
     
    #include "MainWindow.h"
    #include "MapScene.h"
    #include "MapView.h"
     
    MainWindow::MainWindow(QWidget* widgetParent) : QWidget(widgetParent)
    {
        this->setWindowTitle("Test_Qt");
        this->resize(200, 200);
     
        this->initMapScene();
        this->initMapView();
     
        QHBoxLayout* layout = new QHBoxLayout(this);
            layout->addWidget(vue);
     
        QTimer* timer = new QTimer(this);
            timer->setSingleShot(false);
            timer->setInterval(100);
     
        QObject::connect(timer, SIGNAL(timeout()), this, SLOT(drawWords()));
     
        this->setLayout(layout);
        this->show();
    }
     
    MainWindow::~MainWindow()
    {
     
    }
     
    bool MainWindow::initMapScene()
    {
        scene = new MapScene(this);
            QRectF surfacescene(-25, -25, 50, 50);
            scene->setSceneRect(surfacescene);
            QPointF pointOrigin(0, 0);
            scene->setPointOrigin(pointOrigin);
     
        return true;
    }
     
     
    bool MainWindow::initMapView()
    {
        vue = new MapView(scene, this);
            vue->setFixedSize(50, 50);
            vue->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
            vue->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
     
        return true;
    }
     
    void MainWindow::drawWords()
    {
        static int nbCall = 0;
        if (nbCall == 0)
        {
            QLineF line(0, 0, 0, 10);
            this->drawLine(line);
        }
        else if (nbCall == 1)
        {
            QLineF line(0, 0, -10, 0);
            this->drawLine(line);
        }
        else if (nbCall == 2)
        {
            QLineF line(0, 0, 0, -10);
            this->drawLine(line);
        }
        else if (nbCall == 3)
        {
            QLineF line(0, 0, 10, 0);
            this->drawLine(line);
        }
        else
        {
            QLineF line(0, 0, 0, 10);
            this->drawLine(line);
        }
    }
     
    void MainWindow::drawLine(QLineF &line)
    {
        QPointF linePoint1 = line.p1();
        QPointF linePoint2 = line.p2();
     
        QPointF point1 = scene->pointStandart(linePoint1);
        QPointF point2 = scene->pointStandart(linePoint2);
     
        QLineF line2(point1, point2);
        //QPen pen(Qt::blue, 5, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin);
        scene->addLine(line2);
    }

  6. #6
    Membre émérite
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 719
    Points : 2 793
    Points
    2 793
    Par défaut
    Bonjour,

    Que se passe-t-il si tu appelles drawWords() depuis le constructeur?

  7. #7
    Invité
    Invité(e)
    Par défaut
    Il dessine bien la ligne, mais si je l'appelle une deuxième fois, il me redessine la même ligne (ou pas), je croit qu'il ignore la variable statique...

  8. #8
    Membre émérite
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 719
    Points : 2 793
    Points
    2 793
    Par défaut
    Bonjour,

    Ta variable statique doit se déclarer dans ta classe,pas dans la fonction dans laquelle tu l'utilises...
    D'ailleurs tu redéfinis nbCall à 0 lors du lancement de la fonction,donc ça risque pas de faire bouger grand chose

    Sinon,utiliser des timers c'est bien... si on oublie pas de les démarrer

  9. #9
    Invité
    Invité(e)
    Par défaut
    J'ai apporté quelque modifications à mon 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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
     
    #include "MainWindow.h"
    #include "MapScene.h"
    #include "MapView.h"
     
    MainWindow::MainWindow(QWidget* widgetParent) : QWidget(widgetParent)
    {
        this->setWindowTitle("Test_Qt");
        this->resize(200, 200);
     
        this->initMapScene();
        this->initMapView();
     
        QHBoxLayout* layout = new QHBoxLayout(this);
            layout->addWidget(vue);
     
        QTimer* timer = new QTimer(this);
            timer->setSingleShot(false);
            timer->setInterval(100);
            timer->start();
     
        QObject::connect(timer, SIGNAL(timeout()), this, SLOT(drawWords()));
     
        this->setLayout(layout);
        this->show();
    }
     
    MainWindow::~MainWindow()
    {
     
    }
     
    bool MainWindow::initMapScene()
    {
        scene = new MapScene(this);
            QRectF surfacescene(-25, -25, 50, 50);
            scene->setSceneRect(surfacescene);
            QPointF pointOrigin(0, 0);
            scene->setPointOrigin(pointOrigin);
     
        return true;
    }
     
     
    bool MainWindow::initMapView()
    {
        vue = new MapView(scene, this);
            vue->setFixedSize(50, 50);
            vue->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
            vue->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
     
        return true;
    }
     
    void MainWindow::drawWords()
    {
        static int nbCall = 0;
        if (nbCall == 0)
        {
            QLineF line(0, 0, 0, 10);
            this->drawLine(line);
        }
        else if (nbCall == 1)
        {
            QLineF line(0, 0, -10, 0);
            this->drawLine(line);
        }
        else if (nbCall == 2)
        {
            QLineF line(0, 0, 0, -10);
            this->drawLine(line);
        }
        else if (nbCall == 3)
        {
            QLineF line(0, 0, 10, 0);
            this->drawLine(line);
        }
        else
        {
            QLineF line(0, 0, 0, 10);
            this->drawLine(line);
        }
        ++nbCall;
    }
     
    void MainWindow::drawLine(QLineF &line)
    {
        QPointF linePoint1 = line.p1();
        QPointF linePoint2 = line.p2();
     
        QPointF point1 = scene->pointStandart(linePoint1);
        QPointF point2 = scene->pointStandart(linePoint2);
     
        QLineF line2(point1, point2);
        //QPen pen(Qt::blue, 5, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin);
        scene->addLine(line2);
    }
    Mais toujours rien... J'ai mis la variable "static int nbCall = 0;" pour quelle ne soit pas supprimé et conserve sa valeur à la fin de la fonction.

  10. #10
    Membre émérite
    Avatar de supersnail
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    1 719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 719
    Points : 2 793
    Points
    2 793
    Par défaut
    Bonjour,

    il faudrait peut-être lancer le timer APRÈS l'avoir connecté à drawWords...

    Et puis pourquoi ne pas mettre "nbCall" dans ta classe plûtot?
    Parce que chaque fois que tu appelles drawWords, bah ta variable est un peu remise à 0

  11. #11
    Invité
    Invité(e)
    Par défaut
    J'ai déclarer nbCall dans la partie privé de ma classe, puis je l'initialise à zéro dans le constructeur, et dès que drawWords() est appelé, je lui rajoute +1. Et ça marche ! Voici le code source :

    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
     
    #include "MainWindow.h"
    #include "MapScene.h"
    #include "MapView.h"
     
    MainWindow::MainWindow(QWidget* widgetParent) : QWidget(widgetParent)
    {
        this->setWindowTitle("Test_Qt");
        this->resize(200, 200);
     
        nbCall = 0;
     
        this->initMapScene();
        this->initMapView();
     
        QHBoxLayout* layout = new QHBoxLayout(this);
            layout->addWidget(vue);
     
        QTimer* timer = new QTimer(this);
            timer->setSingleShot(false);
            timer->setInterval(1000);
            timer->start();
     
        QObject::connect(timer, SIGNAL(timeout()), this, SLOT(drawWords()));
     
        this->setLayout(layout);
        this->show();
    }
     
    MainWindow::~MainWindow()
    {
     
    }
     
    bool MainWindow::initMapScene()
    {
        scene = new MapScene(this);
            QRectF surfacescene(-25, -25, 50, 50);
            scene->setSceneRect(surfacescene);
            QPointF pointOrigin(0, 0);
            scene->setPointOrigin(pointOrigin);
     
        return true;
    }
     
     
    bool MainWindow::initMapView()
    {
        vue = new MapView(scene, this);
            vue->setFixedSize(50, 50);
            vue->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
            vue->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
     
        return true;
    }
     
    void MainWindow::drawWords()
    {
        if (nbCall == 0)
        {
            QLineF line(0, 0, 0, 10);
            this->drawLine(line);
        }
        else if (nbCall == 1)
        {
            QLineF line(0, 0, -10, 0);
            this->drawLine(line);
        }
        else if (nbCall == 2)
        {
            QLineF line(0, 0, 0, -10);
            this->drawLine(line);
        }
        else if (nbCall == 3)
        {
            QLineF line(0, 0, 10, 0);
            this->drawLine(line);
        }
        else
        {
            QLineF line(0, 0, 0, 10);
            this->drawLine(line);
        }
        ++nbCall;
    }
     
    void MainWindow::drawLine(QLineF &line)
    {
        QPointF linePoint1 = line.p1();
        QPointF linePoint2 = line.p2();
     
        QPointF point1 = scene->pointStandart(linePoint1);
        QPointF point2 = scene->pointStandart(linePoint2);
     
        QLineF line2(point1, point2);
        //QPen pen(Qt::blue, 5, Qt::SolidLine, Qt::RoundCap, Qt::RoundJoin);
        scene->addLine(line2);
    }
    Merci à vous

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

Discussions similaires

  1. [JScrollPane] qui ne veut pas se mettre en haut a gauche
    Par Cyber@l dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 24/11/2006, 11h41
  2. [VB.NET]un formulaire qui ne veut pas se fermer
    Par josyde2006 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 18/08/2006, 09h29
  3. requetes qui ne veut pas passer
    Par suya95 dans le forum Requêtes
    Réponses: 14
    Dernier message: 04/07/2006, 15h17
  4. JOptionPane qui ne veut pas se fermer!
    Par benthebest dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 29/12/2005, 23h05
  5. un fichier qui ne veut pas être supprimé!!!!
    Par en_stage dans le forum Autres Logiciels
    Réponses: 4
    Dernier message: 22/10/2005, 02h08

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