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 :

Dessiner avec QPainter

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mars 2010
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 26
    Par défaut Dessiner avec QPainter
    bonjour,
    je veux dessiner un histogramme avec QPainter ( je ne veux pas utiliser qwt) g lu quelques documentation et j'ai compris qu'on doit écrire le code dans le paintEvent de la classe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    void Accueil::paintEvent(QPaintEvent *)
    {
        painter = new QPainter();
        painter->setPen(Qt::blue);
        painter->setFont(QFont("Arial", 30));
        painter->drawText(2, 2, "Qt");
        painter->end();
     
     
    }
    mais ce que je ne comprend pas comment appeler la fonctions parce que à l'exécution rien ne s'affiche pour moi et le bug m'indique : painter not active

  2. #2
    Membre éprouvé
    Avatar de GreatTux
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2009
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 77
    Par défaut
    En général tu n'as pas à appeler paintEvent toi même, il sera appelé automatiquement quand le widget aura besoin d'être dessiné. Tu peux néanmoins demander qu'il soit redessiné en utilisant repaint() ou update().

    Quelle est la classe mère de ta classe Accueil ?

  3. #3
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    En fait, il est courant de redéfinir la fonction paintEvent quand on veut personnaliser un widget (ce qui est la cas forcement ici puisqu'il veut créer un histogramme, widget qui n'existe pas dans Qt).

    Tu as juste oublié d'appeler la fonction QPainter::begin() pour définir dans quel QPaintDevice tu dessines (ou de passer le QPaintDevice dans le constructeur de QPainter). Regarde la doc de QPainter::begin().


    Plutôt que créer un widget, tu peux également utiliser le framework Graphics View.

  4. #4
    Membre averti
    Inscrit en
    Mars 2010
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 26
    Par défaut
    la classe mère de accueil est QDialog
    c'est juste ou je dois mettre QWidget

  5. #5
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    tu peux aussi écrire , ou dessiner sur un QPixmap ...
    (avec le QPainter)

    ============================================
    Voici quelques liens utilisables :

    http://qt.developpez.com/doc/4.6/qpainter/
    http://qt.developpez.com/doc/4.6/qpixmap/
    http://qt.developpez.com/doc/4.6/qlabel/

    ...
    Dernière modification par johnlamericain ; 20/08/2010 à 12h27. Motif: Suppression des liens doc nokia inutiles.

  6. #6
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    Effectivement, dans ce cas, surcharger le paintEvent du QDialog n'est pas la bonne approche (c'est possible mais ce n'est pas le plus simple)

    La méthode de brother2007 est la plus simple :
    1. tu crées un pixmap de taille que tu souhaites
    2. tu crées un painter sur ce pixmap
    3. tu dessines ton histogramme avec les fonctions de dessin
    4. tu crées un QLabel
    5. tu affiches ton pixmap avec un QLabel::setPixmap

    Si tu veux utiliser paintEvent, il vaut mieux partir d'un QWidget (regarde l'exemple suivant : http://qt.developpez.com/doc/4.6/painting-painterpaths/)

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

Discussions similaires

  1. [2D/3D] Dessiner un QCursor avec QPainter
    Par kaymak dans le forum Débuter
    Réponses: 2
    Dernier message: 28/08/2010, 00h07
  2. Réponses: 2
    Dernier message: 23/05/2010, 03h30
  3. Dessiner avec wxWidgets
    Par SuperPat dans le forum wxWidgets
    Réponses: 5
    Dernier message: 24/02/2009, 00h06
  4. Dessiner une ligne avec QPainter
    Par mr_samurai dans le forum Qt
    Réponses: 3
    Dernier message: 20/11/2008, 13h56
  5. Réponses: 6
    Dernier message: 18/09/2008, 12h35

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