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 :

Comment dessiner sur un QScrollArea ?


Sujet :

Qt

  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2010
    Messages : 88
    Par défaut Comment dessiner sur un QScrollArea ?
    Bonjour,
    tout est dans le titre ...
    J'arrive quand meme à dessiner sur QLabel(ou QWidget) quand il n'est pas intégré à un QScrollArea , mais de lors que que je l'attache ça marche plus!
    Il parait que c'est lié à une fonction de viewport , mais je trouve pas plus d'indication ladessus !
    Quelqu'un aurait une idée .
    Merci d'avance

  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

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2010
    Messages : 88
    Par défaut
    Merci yan de ta réponse !
    Ca résout mon problème .
    Sauf que lorsque je dessine, l'affichage n'est pas instantané !!
    Pour qu'il prenne en compte le dessin que je viens de faire , je dois touché à la taille de la fenêtre , et là il va se mettre à jour !
    Est ce que tu as déjà eu ce genre de problème ? et y'a t il une soltuion à ça ?
    j'ai déjà utilisé update(); ça donne rien !
    Merci

  4. #4
    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 doukha Voir le message
    Sauf que lorsque je dessine, l'affichage n'est pas instantané !!
    tu fait bien tous dans le paintevent?
    Tu utilise quel version de Qt?
    tu peut monter un peu de code?

  5. #5
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2010
    Messages : 88
    Par défaut
    Tout dans le paintEvent , version Qt 4.6.2

    Mon bout de 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
    #include <QtGui>
     
    class MonWidget : public QScrollArea
    {
    public :
    	MonWidget() {}
     
    protected :
        void mouseMoveEvent(QMouseEvent *qevent)
        {
            m_points << qevent->pos();
            update();
        }
        void paintEvent(QPaintEvent *)
        {
            QPainter p1(this->viewport());
    	QPainter p2(this->viewport());
            p2.setPen(Qt::red);//l'image ayant couleur noir alors je decide de dessiner en rouge
     
     
    	p1.drawImage(QPoint(0, 0),QImage("flim/Image08_B0L0S127")); //Je paint l'image avant, pour que je puisse dessiner dessus
            p2.drawPolyline(m_points); //je dessine dessus
     
        }
    private:
        QVector<QPoint> m_points;
    };
     
    int main (int argc, char * argv[])
    {
        QApplication app(argc,argv);
    	QLabel label;
    	MonWidget w;//Qui est un ScrollArea
    	w.setWidget(&label);//Affectation du widget (label)
     
            w.resize(300,300);
            w.show(); //Affichafe ScrollArea
        return app.exec();
    }
    Il reste plus à compiler.Et lorsque tu dessine et que y'a rien .Pense à resizer la taille de la fenetre pour l'affichage.

    ps: p1.drawImage(QPoint(0, 0),QImage("flim/Image08_B0L0S127")); peut etre mis en commentaire. le problème reste le meme !

  6. #6
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    QPainter p1(this->viewport());
    QPainter p2(this->viewport());
    pourquoi deux painter???
    a mon avis ça se rentre dedans. une widget ne devrais être manipuler que par un seule painter à la fois.

  7. #7
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2010
    Messages : 88
    Par défaut
    Bon je viens d'essayer à l'instant avec un seul painter ,
    Et pareil , toujours le problème de la mise à jour de l'affichage !

  8. #8
    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
    et si tu ajoute une taille a ton label/Widget?
    car là j'ai l'impression que tu dessine sur une widget de taille (0,0)

  9. #9
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2010
    Messages : 88
    Par défaut
    Je pense que tu touches à l'anomalie .
    En effet en fesant resize du label à (300,300) .Rien ne marche plus .
    Je perd l'image (que je suppose derriere le label) .Et du coup la main pour dessiner .
    Alors dans ce cas là faut-il absolument mettre le painEvent sur le label (j'ai déja essayé et ça marche ) ?
    Où y'a t-il un autre moyen pour que les paint deQScrollArea (image,dessin ) se mettent sur le Label.
    Merci pour ton aide

  10. #10
    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
    As tu testé le code de la FAQ? es ce qu'il marche toujours?

    Citation Envoyé par doukha Voir le message
    Alors dans ce cas là faut-il absolument mettre le painEvent sur le label (j'ai déja essayé et ça marche ) ?
    ben c'à dépend ce que tu veut faire. Si tu peut expliquer ce que tu cherche à faire.

  11. #11
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2010
    Messages : 88
    Par défaut
    Oui j'ai déja testé, il marche (j'ai deux rectangle vert et rouge ..). Le truc que c'est exemple ne gere pas les events!
    Bref, moi mon but c'est de dessiner sur une images.
    En plus précis j'aurais une image qui contiendrai plusieurs cellules et moi ce que je veux c'est de pouvoir faire le contour des cellules ( avec des ellipse ou polyline) .

  12. #12
    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 doukha Voir le message
    Oui j'ai déja testé, il marche (j'ai deux rectangle vert et rouge ..). Le truc que c'est exemple ne gere pas les events!
    Bref, moi mon but c'est de dessiner sur une images.
    En plus précis j'aurais une image qui contiendrai plusieurs cellules et moi ce que je veux c'est de pouvoir faire le contour des cellules ( avec des ellipse ou polyline) .
    Donc c'est plutôt au niveau du widget que tu embarque dans le Scrollarea.

    D'ailleurs y as peut être une erreur dans l'exemple de la FAQ.
    Faut que je regarde avec ton exemple...

  13. #13
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2010
    Messages : 88
    Par défaut
    oui c'est à ce niveau là !
    Remarque quand je parlais d'event , je faisais référence à mouseMoveEvent , mouseReleaseEvent ....

  14. #14
    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
    y as bien une erreur dans la FAQ...
    en faite, si on utilise le scroll area avec une widget embarqué, le widget est dessiné après le scrollArea et le viewport. d'où ton problème

  15. #15
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Février 2010
    Messages
    88
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2010
    Messages : 88
    Par défaut
    dacodac !
    dans ce cas je vais opter pour un painEvent sur le QLabel .

Discussions similaires

  1. Comment dessiner sur une TextBox
    Par Alexandre` dans le forum Windows Forms
    Réponses: 4
    Dernier message: 11/04/2009, 13h48
  2. comment dessiner sur une image
    Par baracouda dans le forum Graphisme
    Réponses: 2
    Dernier message: 26/05/2006, 01h21
  3. Comment dessiner sur un Bitmap sans scintillement ?
    Par TOTO32 dans le forum Composants VCL
    Réponses: 3
    Dernier message: 10/01/2005, 11h11
  4. [Transparent] - Comment dessiner sur 2 TImage ?
    Par TOTO32 dans le forum Langage
    Réponses: 15
    Dernier message: 08/08/2004, 02h06

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