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 :

QPainter not active.


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 67
    Par défaut QPainter not active.
    Voila... Je crée avec QtCreator, une application basique de type MainWindow.
    Dans le centralWidget, je place un QFrame nommé frame (avec le designer).

    Dans le mainwindow, j'intercepte l'évènement PaintEvent:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    void MainWindow::paintEvent(QPaintEvent *event)
    {
        QPainter dc(ui->frame);
        dc.setPen(Qt::blue);
        dc.drawLine(0,0,100,100);
    }
    la fenêtre "Application output" m'insulte avec:
    QPainter::begin: Paint device returned engine == 0, type: 1
    QPainter::setPen: Painter not active


    De manière évidente, si le QPainter prend this en paramètre au lieu de ui->frame, ça trace, pas sur le frame, bien sur, mais ça trace!

    J'ai du faire une boulette, mais laquelle?
    Pourquoi ne puis-je pas demander un QPainter sur un QWidget enfant?

    Merci de votre aide.

  2. #2
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par deebou Voir le message
    J'ai du faire une boulette, mais laquelle?
    Pourquoi ne puis-je pas demander un QPainter sur un QWidget enfant?
    Pour pouvoir dessine sur une widget, il faut réimplémenter son paint event. Car c'est le seule moment ou ses ressources sont bloqué pour l'utilisation du painter.
    Tu ne peut donc dessiner que sur this

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 67
    Par défaut
    La doc de Qt (QPainter/Detailed description) dit pourtant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Warning: When the paintdevice is a widget, QPainter can only be used inside a paintEvent() function or in a function called by paintEvent();
     that is unless the Qt::WA_PaintOutsidePaintEvent widget attribute is set. 
    On Mac OS X and Windows, you can only paint in a paintEvent() function regardless of this attribute's setting.
    Faut-il comprendre que il doit s'agir de l'évènement de la classe concernée donc this comme cela vient d'être affirmé par Yan?

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Par défaut
    La doc me parait plutot explicite, qu est ce que tu ne comprends pas ?
    Sous Windows ou MacOS, Oui tu dois redéfinir le paintEvent de ta classe héritant de QWidget pour peindre dedans. Tu ne peux pas le faire ailleurs.

    Si tu n'utilises pas ces systèmes, apparamment c'est possible de dessiner en dehors en utilisant l'attribut Qt::WA_PaintOutsidePaintEvent.

    G.

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

Discussions similaires

  1. EJB Transaction not active
    Par Pandev31000 dans le forum Java EE
    Réponses: 1
    Dernier message: 23/04/2012, 13h29
  2. Réponses: 0
    Dernier message: 27/07/2009, 11h46
  3. erreur 109: MaxL API instance not active
    Par flo79 dans le forum Autres outils décisionnels
    Réponses: 4
    Dernier message: 06/02/2009, 17h30
  4. [Hyperion Essbase] : error: 109: MAXL API instance is not active
    Par user0505 dans le forum EPM (Hyperion)
    Réponses: 20
    Dernier message: 21/01/2009, 16h18
  5. Réponses: 6
    Dernier message: 01/08/2007, 12h16

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