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 :

Animation d'un GIF dans un QTextBrowser


Sujet :

Qt

  1. #1
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 858
    Points : 218 577
    Points
    218 577
    Billets dans le blog
    120
    Par défaut Animation d'un GIF dans un QTextBrowser
    Bonjour,

    Pour changer je ne vais pas demander comment on anime un .gif dans un QTextBrowser, je ne fus pas paresseux et j'avais chercher comment le faire.
    J'ai suivi cette méthode: http://wiki.qtcentre.org/index.php?t...n_in_QTextEdit

    Par contre, j'ai essayé d'amélioré la chose, et dans le addAnimation, j'ai rajouté un code pour empecher de crée de QMovie pour le même gif ( cas qui peut arriver dans mon programme ).

    Le problème, c'est qu'après trois ou quatres .gif de charger, le programme monte dans les 20% d'utilisation du CPU.
    Plus je vais charger de .gif différent plus ça va monter. Par contre si j'affiche toujours le même .gif ça ne change pas.

    Je voudrais savoir comment je peux faire pour éviter cela.

    Disons que sur mon PC ( Intel Core Duo T2050 ( oui c'est vieux ) ), chaque nouveau fichier .gif va me prendre 6% du CPU.

    Le problème, c'est qu'il ne semble qu'il n'y ai que les QMovie pour faire l'animation des .gifs.

    Je suis encore en version 4.3.4, mais je vais surement passé à la dernière version très bientot. J'imagine que mon problème sera toujours le meme :s.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  2. #2
    Membre averti
    Avatar de Niak74
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    271
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 271
    Points : 333
    Points
    333
    Par défaut
    Tu es sous Windows?

    Le problème est le même sans ton "add-on" concernant les gifs identiques (6% de proc par gif chargé?).

    Quelle est la taille de tes gifs?


    Pour ce qui est de la mise à jour de Qt vers 4.5, ya eu des avancées sur la rapidité de calcul pour les rendus graphiques très significatifs pour les systèmes basés sur le raster engine (comme Windows, si tu ne modifie pas ce paramètre explicitement).
    Vois toi même : http://labs.trolltech.com/blogs/2009...nce-and-qt-45/
    Un clavier Azerty en vaut deux.

  3. #3
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 858
    Points : 218 577
    Points
    218 577
    Billets dans le blog
    120
    Par défaut
    Pour l'instant je suis sous linux.

    J'essaierai aussi sous windows mais ce n'est pas ma priorité :s
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  4. #4
    Membre averti
    Avatar de Niak74
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    271
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 271
    Points : 333
    Points
    333
    Par défaut
    Je te demande pas du tout de tester sous Windows, c'est juste pour indication.

    Par rapport au lien que je t'ai donné sur l'apport de la 4.5 en rendu GUI, je souligne cette ligne :

    The improvements range from around 30% on Windows for most zoomed out operations to 5-100 times better performance on Linux with the raster paint engine.
    Je te conseille donc fortement de passer à Qt 4.5 (rétrocompatible 4.3).

    Si tu utilises X11 (sans doute le cas) fais appel à ceci pour activer le raster engine (dans le main, avant de construire QApplication) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QApplication::setGraphicsSystem(QString::fromLatin1("raster"));
    NB : c'est l'équivalent de lancer ton application avec l'option -graphicssystem raster.
    Un clavier Azerty en vaut deux.

  5. #5
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 858
    Points : 218 577
    Points
    218 577
    Billets dans le blog
    120
    Par défaut
    Merci pour ces réponses.

    J'ai testé \o/ .

    Je pense qu'il y a eu des gains entre la 4.3 est la 4.5

    Le seul problème c'est que encore une fois j'arrive à atteindre 20 / 30% du CPU après avoir chargé 4;5 .gif.

    L'option du raster pour X11 doit être activée par défault sous la 4.5 car ça n'a rien changé.

    Je ne vois pas trop comment faire pour éviter cette perte de performance :s
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  6. #6
    Membre averti
    Avatar de Niak74
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    271
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 271
    Points : 333
    Points
    333
    Par défaut
    Non non non, sous X11 il faut le déclarer explicitement avant de construire QApplication, c'est bien marqué dans la doc.

    Après ton problème vient peut être d'ailleurs. Fais toujours voir ton code.
    Un clavier Azerty en vaut deux.

  7. #7
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 858
    Points : 218 577
    Points
    218 577
    Billets dans le blog
    120
    Par défaut
    Je veux bien montrer le code, mais comme je l'ai dit dans mon premier post, j'ai repris celui de leur wiki que j'ai ( je crois ) un peu amélioré:

    Le .hpp

    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
     
    #ifndef __ANIMATEDTEXT_HPP__
    #define __ANIMATEDTEXT_HPP__
     
    //Code from http://wiki.qtcentre.org/index.php?title=Animation_in_QTextEdit
     
    #include <QTextEdit>
    #include <QTextBrowser>
    #include <QHash>
    #include <QMovie>
    #include <QUrl>
     
    class AnimatedText : public QTextBrowser
    {
    	Q_OBJECT
     
    	private:
    		QHash<QMovie*, QUrl> urls;
     
    	private slots:
     
    		void animate();
     
    	public:
    		AnimatedText(QWidget* parent = 0):QTextBrowser(parent) { this->setOpenExternalLinks(true); }
    		~AnimatedText(void);
     
    		void addAnimation(const QUrl& url, const QString& fileName);
    };
     
    #endif
    Et le cpp:

    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
    40
    41
    42
    43
    44
     
    #include "AnimatedText.hpp"
     
    #include <iostream>
     
    AnimatedText :: ~AnimatedText(void)
    {
    	QList<QMovie*>listMovies = urls.keys();
    	for(QList<QMovie*>::iterator it_movies = listMovies.begin() ; it_movies != listMovies.end() ; ++it_movies )
    		delete *it_movies;
    	urls.clear();
    }
     
    void AnimatedText :: animate()
    {
    	if (QMovie* movie = qobject_cast<QMovie*>(sender()))
    	{
    		document()->addResource(
    								QTextDocument::ImageResource,
    								urls.value(movie),
    								movie->currentPixmap()
    							   );
     
    		setLineWrapColumnOrWidth(lineWrapColumnOrWidth()); // causes reload
    	}
    }
     
    void AnimatedText :: addAnimation(const QUrl& url, const QString& fileName)
    {
    	QList<QUrl> listUrls = urls.values();
    	if ( !listUrls.contains(url) )	// If we haven't yet this one
    	{
    		QMovie* movie = new QMovie(this);
    		movie->setFileName(fileName);
    		movie->setCacheMode(QMovie::CacheAll);
     
     
    		urls.insert(movie, url);	// We add it
     
    		connect(movie, SIGNAL(frameChanged(int)), this, SLOT(animate()));
     
    		movie->start();
    	}
    }
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  8. #8
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    Le problème, c'est qu'il ne semble qu'il n'y ai que les QMovie pour faire l'animation des .gifs.

    Je suis encore en version 4.3.4, mais je vais surement passé à la dernière version très bientot. J'imagine que mon problème sera toujours le meme .
    Suivant ce que tu fais avec le QTextBrowser, tu peux peut-être envisager de le remplacer par un QWebView (webkit, Qt-4.4 minimum) qui gère directement les GIFs animées. Tu peux vérifier le gain de performance au préalable en créant simplement une page HTML avec suffisamment de gifs animées et la charger dans le navigateur des démos Qt.

  9. #9
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 858
    Points : 218 577
    Points
    218 577
    Billets dans le blog
    120
    Par défaut
    Pourquoi pas le QWebView.

    Mais il me semble qu'il me manque un truc que je veux avoir, c'est la possibilité d'ouvrir les hyperliens avec un programme externe. ( Comme le fait très bien le QTextBrowser ) mais je n'ai pas retrouvé cette possibilité dans mon parcours rapide de la doc.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  10. #10
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    Mais il me semble qu'il me manque un truc que je veux avoir, c'est la possibilité d'ouvrir les hyperliens avec un programme externe. ( Comme le fait très bien le QTextBrowser ) mais je n'ai pas retrouvé cette possibilité dans mon parcours rapide de la doc.
    http://qt.developpez.com/doc/4.6-sna...w/#linkclicked
    http://qt.developpez.com/doc/4.6-sna...ionpolicy-enum

  11. #11
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 858
    Points : 218 577
    Points
    218 577
    Billets dans le blog
    120
    Par défaut
    Pardon, dans la doc du LinkDelegationPolicy, je n'avais pas compris qu'il ouvrait un nouveau navigateur... j'avais juste compris qu'il n'envoyait pas le signal.
    Enfin je suis pas sur de comprendre, car ça m'interesse pas de faire le lancement d'un logiciel tiers à la main. Ce que proposait le QTextBrowser était bien pour ça.
    Je veux dire que si je dois récupéré le signal LinkClicked, pour enclencher moi même un logiciel tiers, je trouve ça un peu embetant ( surtout pour savoir quel logiciel démarrer )
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  12. #12
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 033
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    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 033
    Points : 13 968
    Points
    13 968
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    Je veux dire que si je dois récupéré le signal LinkClicked, pour enclencher moi même un logiciel tiers, je trouve ça un peu embetant ( surtout pour savoir quel logiciel démarrer )
    regarde ceci
    http://qt.developpez.com/faq/?page=q...ogramme_defaut
    C'est ce qu'utilise QTextBrowser (normalement).

  13. #13
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 858
    Points : 218 577
    Points
    218 577
    Billets dans le blog
    120
    Par défaut
    Cool merci

    Il va falloir que je le fasse maintenant :p. Je vous tiendrai au courant, mais n'attendez pas de réponse avant une semaine.

    Sinon, vraiment désolé d'avoir fait le fainéant ... :s
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  14. #14
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    Pardon, dans la doc du LinkDelegationPolicy, je n'avais pas compris qu'il ouvrait un nouveau navigateur... j'avais juste compris qu'il n'envoyait pas le signal.
    Enfin je suis pas sur de comprendre, car ça m'interesse pas de faire le lancement d'un logiciel tiers à la main. Ce que proposait le QTextBrowser était bien pour ça.
    Je veux dire que si je dois récupéré le signal LinkClicked, pour enclencher moi même un logiciel tiers, je trouve ça un peu embetant ( surtout pour savoir quel logiciel démarrer )
    Comme QWebView est un browser, par défaut il suit l'URL lui-même au lieu d'ouvrir un autre navigateur. Mais s'il faut ouvrir un autre navigateur en tant qu'application, il n'y a aucune difficulté, une ligne suffit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QDesktopServices::openUrl(url);

  15. #15
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 858
    Points : 218 577
    Points
    218 577
    Billets dans le blog
    120
    Par défaut
    Merci pour la solution, il y a un vrai gain cette fois. Donc mon problème est résolu.
    Merci à tous :up:
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

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

Discussions similaires

  1. [WD16] Problème d'animation GIF dans une fenêtre fille
    Par lololebricoleur dans le forum WinDev
    Réponses: 2
    Dernier message: 17/06/2011, 13h33
  2. Réponses: 1
    Dernier message: 04/02/2011, 16h52
  3. Insérer une animation gif dans un pdf
    Par djocin dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 1
    Dernier message: 28/10/2009, 20h38
  4. Réponses: 2
    Dernier message: 19/11/2004, 08h54

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