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 :

Afficher une image depuis l'Internet


Sujet :

Qt

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 264
    Points : 52
    Points
    52
    Par défaut Afficher une image depuis l'Internet
    Bonjour

    Voilà je reviens pour un petit problème de codage...

    Voilà je fais une requête sur mon serveur et lui me renvoie un lien d'une image sur internet.

    Donc je traite via SAX la réponse du serveur j'obtiens le lien de mon image plus des informations comme le titre, auteur, durée etc...

    Mais c'est la que je bloc, je sais qu'il n'est pas possible d'afficher une image qui se trouve sur internet donc la seul façon c'est de refaire une requête pour qu'il télécharge l'image qu'il la place dans le dossier temporaire et ensuite je l'affiche avec les autres informations (titre, auteur...)

    Mais je me demande comment passer toute la QList vu qu'à l'origine je n'avais pas d'image donc je traitais le fichier XML, créer un QList avec toutes les infos et je l'envoie en paramètre dans le slot d'affichage qui va afficher toutes les infos.

    Mais comme il y a l'image maintenant je vais devoir passer la QList de slot en slot jusque celle d'affichage ?
    Enfin je bloc dessus...

    Voilà le code pour que ce soit un peu plus clair ^^
    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
     
    void FenInfos::traitement_xml()
    {
        QList<QString> results;
     
        QNetworkReply *reply = qobject_cast<QNetworkReply*>(sender());
        QXmlStreamReader reader(reply->readAll());
        reader.readNext();
    [...]
                        if(reader.name() == "titre")
                        {
                            QString Titre = reader.readElementText();
                            results.append(Titre); // voilà comment je rajoute dans le QList
                        }
    [...]
     
        //affichage(results); Avant j'allais directement au slot affichage pour afficher les infos mais comme il faut re-telecharger l'image...
        image(results);
    }
     
    void FenInfos::image(const QList<QString> &infos)
    {
        // infos[9] j'ai pas encore trouvé comme le mettre dans QUrl si je le mets comme ça ça ne compile pas, ni avec un QString...
        QNetworkRequest url_requete(QUrl(infos[9]));
        QNetworkAccessManager *manager = new QNetworkAccessManager;
     
        QNetworkReply *reply = manager->get(url_requete);
        connect(reply, SIGNAL(error(QNetworkReply::NetworkError)), this, SLOT(messageErreur(QNetworkReply::NetworkError)));
        connect(reply, SIGNAL(finished()), this, SLOT(enregistrement_image(infos)));
    }
     
    void FenInfos::enregistrement_image(QList<QString> infos1)
    {
        QNetworkReply *reply = qobject_cast<QNetworkReply*>(sender());
     
        QFile fichier_temp(QDir::tempPath()+"/"+QString("image_film.jpg"));
        fichier_temp.open(QIODevice::WriteOnly);
        fichier_temp.write(reply->readAll());
        fichier_temp.close();
        fichier_temp.deleteLater();
        affichage(infos1);
    }
     
    void FenInfos::affichage(const QList<QString> &infos2)
    {
        if(infos.isEmpty())
        {
            QMessageBox::information(this, "Erreur !", "Aucun film n'a été sélectionné, aucun résumé possible !");
        }
     
        deleteLayout(frame_image->layout());
        deleteLayout(frame_details->layout());
        deleteLayout(frame_synopsis->layout());
     
     
        frame_image->setFrameShape(QFrame::StyledPanel);
     
            QLabel *label_image = new QLabel(this);
            label_image->setPixmap(QPixmap(QDir::tempPath()+"/"+QString("image_film.jpg")));
     
            QVBoxLayout *vbox_image = new QVBoxLayout;
            vbox_image->addWidget(label_image);
     
        frame_image->setLayout(vbox_image);
     
     
        frame_details->setFrameShape(QFrame::StyledPanel);
     
            QLabel *label_titre = new QLabel("Titre : "+infos2[0]);
            QLabel *label_date_sortie = new QLabel("Date sortie : "+infos2[1]);
     
            QVBoxLayout *vbox_details = new QVBoxLayout;
            vbox_details->addWidget(label_titre);
            vbox_details->addWidget(label_date_sortie);
    }
    Merci

  2. #2
    Membre du Club Avatar de beni46
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 62
    Points : 63
    Points
    63
    Par défaut
    Si tu obtiens un lien essaye d'utiliser l'objet QWebView.

    http://qt.developpez.com/doc/latest/qwebview/

    Il permet d'afficher des pages web.
    «Placez votre main sur un poêle une minute et ça vous semble durer une heure. Asseyez vous auprès d'une jolie fille une heure et ça vous semble durer une minute. C'est ça la relativité.»
    [ Albert Einstein ]

    «Il n’existe que deux choses infinies, l’univers et la bêtise humaine... mais pour l'univers, je n'ai pas de certitude absolue.»
    [ Albert Einstein ]

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2006
    Messages
    264
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 264
    Points : 52
    Points
    52
    Par défaut
    Oui je connais mais c'est pas top pour afficher juste une image, vu que c'est assez lourd ça risque de rendre l'affichage de la fenêtre beaucoup plus long et pour un petit logiciel c'est pas top :s

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


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 860
    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 860
    Points : 219 064
    Points
    219 064
    Billets dans le blog
    120
    Par défaut
    @austin_fla: J'ai le même problème, avez vous trouvé la solution depuis le temps?

    Sinon, pour ma part, j'ai essayé avec un QLabel, en lui mettant du code HTML ( <img> ) mais cela ne semble pas fonctionner ( ou j'ai fait une erreur ) )
    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.

  5. #5
    Membre averti

    Profil pro
    Inscrit en
    Mars 2010
    Messages
    199
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 199
    Points : 359
    Points
    359
    Par défaut
    Non, ça ne marche pas avec un simple QLabel, il n'est pas prévu pour aller chercher des images - il ne peut afficher que des images déjà chargées en mémoire (chargées via QPixmap par exemple).

    La solution toute faite est de passer par une QWebView.

    L'autre solution est de passer par QNetworkAccessManager pour récupérer l'image ( QNetworkReply est un QIODevice, un readAll retournera un QByteArray et QPixmap::loadFromData permet de charger une image à partir d'un QByteArray), et ensuite assigner la pixmap au qlabel.

Discussions similaires

  1. Afficher une image depuis un fichier
    Par Bourak dans le forum MFC
    Réponses: 1
    Dernier message: 23/06/2007, 15h01
  2. afficher une image depuis un combobox
    Par ghosthacker dans le forum MFC
    Réponses: 5
    Dernier message: 11/06/2007, 10h35
  3. Afficher une image depuis ma base de données MySQL
    Par hnoumbo dans le forum Outils
    Réponses: 3
    Dernier message: 16/08/2006, 08h57
  4. [Image] Afficher une image depuis serveur distant
    Par grinder59 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 17/05/2006, 09h45
  5. [FLASH MX2004] Afficher une image provenant d'Internet
    Par micatmidog dans le forum ActionScript 1 & ActionScript 2
    Réponses: 4
    Dernier message: 26/04/2006, 15h38

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