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 :

QQ n°12 : Optimisation avec QPixmapCache


Sujet :

Qt

  1. #1
    Inactif  


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

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 620
    Points
    15 620
    Par défaut QQ n°12 : Optimisation avec QPixmapCache
    Bonjour à tous

    Voici une nouvelle traduction d'un article de Qt Quarterly décrivant une méthode de mise en cache des pixmaps pour optimiser l'affichage des widgets. La méthode est illustré à travers 2 exemples de widgets personnalisés dont le code source est fournis.

    http://qt-quarterly.developpez.com/qq-12/qpixmapcache/


    Pour rappel, les Qt Quarterly sont des articles techniques écris par des spécialistes de Qt. Plusieurs articles ont été traduit en français par l'équipe de rédaction Qt de developpez.com. Retrouvez les traductions à http://qt-quarterly.developpez.com/.

    N'hésitez pas à commenter cet article et à partager votre propre expérience concernant des approches similaires d'optimisation.

    Bonne lecture.

  2. #2
    Invité
    Invité(e)
    Par défaut
    Superbe traduction ! Bravo gbdivers !

    Bon quand même un peu vieux... Certaine classe ont disparute depuis le temps... Je pense par exemple à QPointArray, ou encore à QGrid (dans le code source téléchargeable)...

    J'ai quand même une question, dans les codes suivants :

    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
     
    void Lights::paintEvent(QPaintEvent *)
    {
        QString key = QString("lights:%1:%2")
                              .arg(m_color.name())
                              .arg(m_diameter);
        QPixmap pixmap;
     
        if (!QPixmapCache::find(key, pixmap)) {
            pixmap = generatePixmap();
            QPixmapCache::insert(key, pixmap);
        }
        bitBlt(this, 0, 0, &pixmap);
    }
    // Et
    void Graph::paintEvent(QPaintEvent *)
    {
        if (m_width <= 0 || m_height <= 0)
            return;
     
        QPixmap pixmap;
     
        if (!QPixmapCache::find(key(), pixmap)) {
            pixmap = generatePixmap();
            QPixmapCache::insert(key(), pixmap);
        }
        bitBlt(this, 0, 0, &pixmap);
    }
    A quoi correspond la fonction bitBlt ? je ne la trouve ni dans l'en-tête QtGlobal, ni dans QWidget...

    Un dernière question :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    QString Graph::key() const
    {
        QString result;
        result.sprintf("%p", static_cast<const void *>(this));
        return result;
    }
    La fonction sprintf... Elle sert à quoi ? Je ne la trouve pas dans la doc...

    A part ça, je trouve que tu aurais au moins dû signaler la version de Qt... Merci quand même, bonne continuation à toi.

  3. #3
    Inactif  


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

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 620
    Points
    15 620
    Par défaut
    Bonjour Abdelite et merci pour tes remarques.

    Cette traduction (l'une de mes premières) décrit une technique très utile. Voilà pourquoi je l'ai écrite, malgré son ancienneté. Même si le code doit être modifié, le principe reste d'actualité.

    L'article original date de 2004 et donc il faut regarder la doc de Qt 3 :
    - pour sprintf : http://qt.developpez.com/doc/3.3/qstring.html#sprintf (cette fonction permet de mettre en forme du texte)
    - pour bitBlt : http://qt.developpez.com/doc/3.3/qpa...ce.html#bitBlt (réalise une copie pixel par pixel d'un QPixmap vers un QPixmap).
    Tu peux utiliser le code suivant à la place :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    QPainter painter(this);
    painter.drawPixmap(0,0, pixmap);
    Cela fait partie des mes projets de reprendre les traductions de Qt Quarterly et de vérifier les informations et le code fournit pour mettre à jour (après les traductions de QQ33 et des "Qt Graphics and performances")

  4. #4
    Invité
    Invité(e)
    Par défaut
    Merci pour la réponse gbdivers, bonne continuation, et à bientôt pour de nouvelle traductions.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Un autre petite erreur : painter.setBrush(darkGray); => painter.setBrush(Qt::darkGray);.

  6. #6
    Inactif  


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

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Points : 15 620
    Points
    15 620
    Par défaut
    Ça, ce n'est pas une erreur. Le code original (Qt3) n'utilise pas Qt::

    Pour le moment, le code sources des Qt Quarterly n'est mis à jour en fonction de la version de Qt

  7. #7
    Invité
    Invité(e)
    Par défaut
    Ah ok... Je ne savais pas. Merci quand même du renseignement...

Discussions similaires

  1. Optimisation avec QPixmapCache
    Par Lquatre dans le forum PyQt
    Réponses: 0
    Dernier message: 10/02/2012, 22h34
  2. Réponses: 9
    Dernier message: 27/04/2006, 15h02
  3. Optimisation avec le cull facing
    Par jcloupgarou dans le forum OpenGL
    Réponses: 4
    Dernier message: 25/04/2006, 14h52

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