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 :

paintEvent n'est pas appelé


Sujet :

Qt

  1. #1
    Invité
    Invité(e)
    Par défaut paintEvent n'est pas appelé
    Bonjour, je veux dessiner sur un widget mais Qt ne veut pas le faire.

    J'ai redéfini la méthode paintEvent comme indiqué dans la doc.

    Code cpp : 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
     
    void GWidget::paintEvent(QPaintEvent* event) {
        QWidget::paintEvent(event);
        std::cout<<"repaint!"<<std::endl;
        QPainter painter;
        painter.begin(this);
        static const QPoint points[4] = {
            QPoint(10, 80),
            QPoint(20, 10),
            QPoint(80, 30),
            QPoint(90, 70)
        };
        painter.setPen(Qt::SolidPattern);
        painter.drawPolygon(points, 4);
        painter.end();
    }

    Lorsque j'appelle repaint la méthode paintEvent n'est pas appelée alors j'ai essayer de l'appeler manuellement :
    Code cpp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     QPaintEvent event(QRegion(0, 0, gWidget->width(), gWidget->height()));
        gWidget->paintEvent(&event);

    Voici l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    QWidget::paintEngine: Should no longer be called
    QPainter::begin: Paint device returned engine == 0, type: 1
    QPainter::setPen: Painter not active
    QPainter::end: Painter not active, aborted

  2. #2
    Membre confirmé Avatar de Gaulouis
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2015
    Messages
    252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 252
    Points : 476
    Points
    476
    Par défaut
    Salut,

    - Peux tu nous montrer le code qui déclare la fonction paintEvent dans la class GWidget
    - Peux tu nous assurer que gWidget->width() et gWidget->height() retourne un nombre positif

  3. #3
    Invité
    Invité(e)
    Par défaut
    - Peux tu nous montrer le code qui déclare la fonction paintEvent dans la class GWidget
    Code cpp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    void paintEvent(QPaintEvent* event);

    - Peux tu nous assurer que gWidget->width() et gWidget->height() retourne un nombre positif
    Non qWidget->height() retourne 0 mais je l'ai mis dans un layout et pas moyen de le resize :

    Code cpp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    gWidget = new GWidget(qws[16]);
        qvbls[16]->addWidget(qlr);
        qvbls[16]->addWidget(gWidget);
        gWidget->setGeometry(0, 0, width(), 100);

    Voici les dimensions du widget :

    Comment je peux forcer le resize surtout que je n'ajoute rien sur ce widget, je veux juste dessiner dessus!

  4. #4
    Membre confirmé Avatar de Gaulouis
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2015
    Messages
    252
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 29
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2015
    Messages : 252
    Points : 476
    Points
    476
    Par défaut
    Il me semble que tu es obligé d'utiliser le mot clef virtual

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    virtual void paintEvent(QPaintEvent* event);
    As-tu essayé avec minimumSize(); et resize();

  5. #5
    Invité
    Invité(e)
    Par défaut
    Ok avec setMinimumSize ça fonctionne, merci.

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

Discussions similaires

  1. [Framework] [AOP] L'aspect n'est pas appelé
    Par damien77 dans le forum Spring
    Réponses: 1
    Dernier message: 19/02/2009, 17h41
  2. La classe Installer n'est pas appelée
    Par alexandreb dans le forum C#
    Réponses: 5
    Dernier message: 06/07/2007, 15h35
  3. [AJAX] [Firefox] send n'est pas appelée tout le temps
    Par MademoiselleL dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 05/07/2007, 15h16
  4. [débutant] la methode Validate() n'est pas appellée
    Par maxattack dans le forum Struts 1
    Réponses: 26
    Dernier message: 16/05/2007, 17h06
  5. [servlet][filtre] filtre qui n'est pas appelé
    Par felix79 dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 29/06/2005, 20h09

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