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 :

[QGraphisScene] Affichage déficient lors d'un redimensionnement [2D/3D]

  1. #1
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Points : 2 284
    Points
    2 284
    Par défaut [QGraphisScene] Affichage déficient lors d'un redimensionnement
    Hello,

    J'ai un QGraphicsScene personnalisé dans lequel j'ai redéfinit drawBackground pour faire un dégradé.
    Cela fonctionne, cependant lorsque je redimensionne voici ce qu'il se produit :

    État ok :

    Nom : Image 1.png
Affichages : 46
Taille : 136,2 Ko

    État KO :

    Nom : Image 3.png
Affichages : 49
Taille : 70,9 Ko

    J'ai pas trouvé d'infos dans la doc à ce sujet ou sur google.... Ai-je une autre solution que de proscrire un redimensionnement de taille inférieur à l'espace dessiner par ma QGraphicsScene ?

    Merci
    à plus

  2. #2
    Rédacteur

    Avatar de johnlamericain
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    3 742
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 3 742
    Points : 8 140
    Points
    8 140
    Par défaut
    Peux-tu nous fournir une partie de ton code qui permet de dessiner ton dégradé ? Est-ce que tu as calculé le dégradé pour la taille exact de ton fond et du coup il ne serait pas comment remplir un fond plus grand ?

  3. #3
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Points : 2 284
    Points
    2 284
    Par défaut
    Bonsoir !

    Peux-tu nous fournir une partie de ton code qui permet de dessiner ton dégradé ?
    Bien sûr ! Je le mets plus bas.

    Est-ce que tu as calculé le dégradé pour la taille exact de ton fond et du coup il ne serait pas comment remplir un fond plus grand ?
    Hmm. J'ai utiliser le Rectangle reçu en paramètre de la méthode drawBackground
    http://qt.developpez.com/doc/latest/...drawBackground
    J'imagine que ce rect correspond à la zone affichée, donc effectivement il est plus petit, ou strictement égal, à la la zone de dessin.
    Alors j'imagine que je doit pouvoir récupérer la taille "fixe" du graphicsview, et redessiner en utilisant cette information.

    Mais du coup, comment peut on faire si on souhaite redimensionner le background ? Ne risque t'on pas d'avoir le même problème ?

    En tout cas merci de ces infos, je vais tenter d'utiliser une taille fixe, ce qui résoudra sûrement mon problème actuel : )

    Code colorpickerscene.h : 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
     
    #ifndef COLORPICKERSCENE_H
    #define COLORPICKERSCENE_H
     
    #include <QGraphicsScene>
    #include <QMouseEvent>
     
    class ColorPickerScene : public QGraphicsScene
    {
        Q_OBJECT
    public:
        explicit ColorPickerScene(QObject *parent = 0);
    protected:
        void ColorPickerScene::drawBackground ( QPainter * painter, const QRectF & rect );
        void ColorPickerScene::mouseReleaseEvent ( QGraphicsSceneMouseEvent * mouseEvent );
        void ColorPickerScene::mouseMoveEvent ( QGraphicsSceneMouseEvent *mouseEvent );
     
    signals:
        void released(QGraphicsSceneMouseEvent *event);
        void moved(QGraphicsSceneMouseEvent *event);
     
    public slots:
    };
     
    #endif // COLORPICKERSCENE_H
    Code colorpickerscene.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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
    #include "colorpickerscene.h"
    #include <QPainter>
    #include <QLinearGradient>
    #include <QBrush>
    #include <QGraphicsSceneMouseEvent>
     
    ColorPickerScene::ColorPickerScene(QObject *parent) :
        QGraphicsScene(parent)
    {
    }
     
    void ColorPickerScene::drawBackground ( QPainter * painter, const QRectF & rect )
    {
        painter->fillRect(rect, this->backgroundBrush());
     
        QLinearGradient linearGrad2(rect.left()-0,0,rect.right(),0);
        linearGrad2.setColorAt(0, Qt::white);
        linearGrad2.setColorAt(1, Qt::transparent);
        painter->setCompositionMode(QPainter::RasterOp_NotSource);
        painter->fillRect(rect, QBrush(linearGrad2));
     
        QLinearGradient linearGrad(0,rect.top(),0,rect.bottom());
        linearGrad.setColorAt(0, Qt::transparent);
        linearGrad.setColorAt(1, Qt::black);
        painter->fillRect(rect, QBrush(linearGrad));
    }
    void ColorPickerScene::mouseReleaseEvent ( QGraphicsSceneMouseEvent *mouseEvent )
    {
        emit released( mouseEvent );
    }
    void ColorPickerScene::mouseMoveEvent ( QGraphicsSceneMouseEvent *mouseEvent )
    {
        emit moved( mouseEvent );
    }

  4. #4
    Rédacteur

    Avatar de johnlamericain
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    3 742
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 3 742
    Points : 8 140
    Points
    8 140
    Par défaut
    Je vais avoir du mal à t'aider car pour ma part ça marche impeccable chez moi...

    Nom : original.png
Affichages : 55
Taille : 47,2 Ko

    Nom : resize.png
Affichages : 49
Taille : 48,1 Ko

    Je me suis créer un main.cpp tout simple et j'ai mis des couleurs plus marrantes

    Code main.cpp : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
     
        QDialog fenetre;
        ColorPickerScene scene;
        QGraphicsView view(&scene, &fenetre);
        QVBoxLayout *vbox = new QVBoxLayout;
        vbox->addWidget(&view);
        fenetre.setLayout(vbox);
        fenetre.show();
     
        return app.exec();
    }

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Points : 2 284
    Points
    2 284
    Par défaut
    wouav t'as fais vite... : )

    J'imagine que j'ai dû activé une option tout à fait inutile durant mes essais.

    Merci bien en tout cas.

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Points : 2 284
    Points
    2 284
    Par défaut
    Hello,

    Je viens de faire quelques essais et en supprimant le vbox, le bug se reproduit.

    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
     
    #include <QApplication>
    #include <QGraphicsView>
    #include <QVBoxLayout>
    #include "colorpickerscene.h"
    #include <QDialog>
     
    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
     
        QDialog fenetre;
        ColorPickerScene scene;
        QGraphicsView view(&scene, &fenetre);
        //QVBoxLayout *vbox = new QVBoxLayout;
        //vbox->addWidget(&view);
        //fenetre.setLayout(vbox);
     
     
        //vbox->setMargin(0);
        view.resize(50,80);
        view.setMinimumSize(QSize(30, 30));
        fenetre.setMinimumSize(QSize(30, 30));
        fenetre.show();
     
        return app.exec();
    }
    Maintenant que je sais quoi faire je vais tout de même essayer de comprendre pourquoi la version sans vbox fais ce bug.

    Merci, a plus

  7. #7
    Rédacteur

    Avatar de johnlamericain
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2004
    Messages
    3 742
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 3 742
    Points : 8 140
    Points
    8 140
    Par défaut
    En quoi le layout te gène ? Les widgets sont fait pour être contenu dans des layouts et pas pour être afficher dans le vide

    Sinon je ne sais pas non plus..

  8. #8
    Membre émérite
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 448
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 448
    Points : 2 284
    Points
    2 284
    Par défaut
    Ah non c'est pas qu'il me gène, c'est plutot que j'en voyait pas l'utilité : /

    Maintenant que je sais cela je vais m'en servir ; )
    Mais j'aime bien savoir d'où vient un bug afin de ne pas le reproduire, à défaut de n'en comprendre ces mécanismes : )


    A plus

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

Discussions similaires

  1. [HTML-JS] problème de décalage lors d'un redimensionnement
    Par cybersplash dans le forum Balisage (X)HTML et validation W3C
    Réponses: 13
    Dernier message: 26/03/2007, 18h04
  2. Image scintillante lors d'un redimensionnement
    Par QAYS dans le forum Delphi
    Réponses: 3
    Dernier message: 22/02/2007, 11h34
  3. J'ai un problème d'affichage console lors
    Par yvon_huynh dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 22/05/2006, 13h46
  4. [CSS] affichage image lors du survol d'un lien
    Par t_om84 dans le forum Mise en page CSS
    Réponses: 1
    Dernier message: 24/03/2006, 03h02
  5. [BPW] Affichage clignotant lors de redimensionnement fenêtre
    Par Alcatîz dans le forum Turbo Pascal
    Réponses: 10
    Dernier message: 24/04/2004, 00h01

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