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 :

QHttp et Line


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Par défaut QHttp et Line
    Bonjour à tous,
    je suis de retour car j'ai deux trois petits soucis.

    - Tout d'abord, comment faire pour coder les "ligne vertical" et "ligne horizontal" présent dans QT Designer, car toute ma fenêtre est codée sauf les "Line" du coup cela fait un peu tache dans mon .ui ... (J'ai essayer QLine mais ça n'a rien à voir)

    - J'ai créer une fonction pour récupérer une image lorsque que l'on connait l'URL, comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    void Fenprog::recuperer_images(QUrl adresse)
    {
    QHttp *http = new QHttp(adresse.host(),80);
    QFile *page = new QFile("tempory files/image.jpg");
    http->get(adresse.toString(), page);
    page->close();
    http->close();
    }
    J'ai bien le fichier mais il manque des pixels, (j'avais eu le même problème en php et j'avait du faire une boucle car il récupère que les x premiers octets du fichier mais avec Qt, je ne voit pas comment faire.

    - Et pour finir, je souhaite récupérer le code source d'une page html dans un string, la fonction est quasi la même sauf que je n'arrive pas à récupérer la soruce dans le string
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    string Fenprog::recuperer_source(QUrl adresse)
    {
    QHttp *http = new QHttp(adresse.host(),80);
    string source;
    http->get(adresse.toString(), source);
    page->close();
    http->close();
    return source
    }
    La ligne 5 est sans doute débile mais je n'est rien trouvé dans la documentation ni dans les forums (même si de nombreux sujets traite de cela)


    Merci d'avance.
    Cordialement

    NeoKript

  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
    Par défaut
    Salut.
    QHttp::get est asynchrone....
    http://qt.developpez.com/doc/4.4/qhttp/#get
    When the request is started the requestStarted() signal is emitted. When it is finished the requestFinished() signal is emitted.
    Il te faut donc attendre requestFinished();

    Il existe une autre méthode avec qt 4.4 en utilisant qnetworkaccessmanager
    http://qt.developpez.com/doc/4.4/qne...nager/#details
    et en utilisant sender() et qobject_cast pour récupérer le qnetworkreply qui as emit le signal finished ()

    http://qt.developpez.com/doc/4.4/qobject/#sender
    http://qt.developpez.com/doc/4.4/qobject/#qobject_cast
    http://qt.developpez.com/doc/4.4/qnetworkreply/

  3. #3
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Par défaut
    Salut et merci pour ta réponse.
    J'ai commencé à regarder et je pense utiliser done(bool) qui renvoie true. Voilà mon 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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    #include "FenRecuperation.h"
     
    using namespace std;
     
     
    FenRecuperation::FenRecuperation(QWidget *parent) : QWidget(parent)
    {
        setupUi(this);
        connect(dl,SIGNAL(clicked()),this,SLOT(telecharger()));
    }
     
    void FenRecuperation::recuperer_images(QUrl adresse)
    {
        QHttp *http = new QHttp(adresse.host(),80);
        QFile *page = new QFile("tempory files/image.jpg");
        http->get(adresse.toString(), page);
     
        connect(http, SIGNAL(dataReadProgress(int, int)),this, SLOT(maj_donnees_lues(int, int)));
        connect(http,SIGNAL(done(bool)),this,SLOT(etat(bool)));
     
        while (conteniretat->text()!="OK")
        {
     
        }
     
     
        page->close();
        http->close();
    }
     
    void FenRecuperation::maj_donnees_lues(int lu, int total)
     {
         bar_DL_image->setMaximum(total);
         bar_DL_image->setValue(lu);
     
     }
     
     void FenRecuperation::telecharger()
     {
        QUrl url("url_de_l'image");
        recuperer_images(url);
     }
     
    void FenRecuperation::etat(bool fini)
    {
        if (fini==true)
        {
            conteniretat->setText("OK");
        }
        else
        {
            conteniretat->setText("pas_OK");
        }
     }
    Je sais que c'est très "moche" de faire comme cela mais je ne voit pas comment récupérer l'état de la variable booléenne dans ma fonction recuperer_images(QUrl adresse). Un peu d'aide serait la bienvenue, sinon le défilement de la QProgressBar marche nickel, seul petit problème, l'image ne se télécharge toujours pas entièrement.

    Pour les autres questions quelqu'un aurait des idées ?

    Merci
    NeoKript

  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
    As tu essayé d'ouvrir le fichier en binaire??
    sinon, pour te répondre, tu devrais te faire une classe que gère le téléchargement. Ainsi la fermeture du fichier et du QHttp se fera dans le slot.

  5. #5
    Membre éclairé
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2007
    Messages
    634
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2007
    Messages : 634
    Par défaut
    Ouè c'est pas bête je vais essayer, merci beaucoup, pour les "ligne horizontal" et "vertical" tu ne sais pas a quel classe elles apparatiennent ?

  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
    dsl, je me suis mal expliqué.
    il faut faire open aprés la création du QFile
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
     QFile *page = new QFile("tempory files/image.jpg");
    page->open(QIODevice::WriteOnly)
    Voici un exemple avec la nouveauté de QT4.4 QNetworkAccessManager. Il faut ajouter QT+=network dans le .pro
    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
     
    #include <QtGui>
    #include <QtNetwork>
     
     
    class myDownload : public QObject
    {
    	Q_OBJECT
    	//url du fichier à telecharger
    	QUrl  m_url;
    	//nom du ficher de destination
    	QString m_dest;
     
    	//le network manager utilisé
    	QNetworkAccessManager m_NetworkAccessManager;
     
    	//une progress bar pour avoir un visualisation de l'avancement
    	QProgressDialog m_bar;
     
    public :
        myDownload(const QUrl & url,const QString & text):m_url(url),m_dest (text)
    	{
    		m_bar.setWindowModality(Qt::ApplicationModal);
            m_bar.show();
    		QNetworkReply * reply =m_NetworkAccessManager.get (QNetworkRequest (m_url) );
     
    		connect(reply,SIGNAL(finished ()),this,SLOT(downloadFinish()));
    		connect(reply,SIGNAL(downloadProgress (qint64, qint64)),this,SLOT(progress(qint64, qint64 )));
     
     
    		m_bar.exec();
     
    	}; 
    public slots :
    		void downloadFinish()
    		{
    			//le download est fini
    			QNetworkReply * reply = qobject_cast<QNetworkReply *>(sender());
    			if (reply)
    			{
    				QFile file(m_dest);
    				file.open(QIODevice::WriteOnly);
    				file.write(reply->readAll ());
    			}
    			m_bar.close();
     
    		}
    		//progression du download
    		void progress (qint64 bytesReceived, qint64 bytesTotal )
            {
    			m_bar.setValue(100.*bytesReceived/bytesTotal-1);
            }
    };
     
    #include "main.moc"
     
     
    int main(int argc, char* argv[])
    {
        QApplication app(argc, argv);
        //donner l'url du fichier
    	QString url =QInputDialog::getText (0, "url", "url");
     
    	//donner le nom du fichier de sortie
    	QString dest =QInputDialog::getText (0, "dest", "dest");
    	myDownload download(url,dest);
        return 0;
    }

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

Discussions similaires

  1. JList en line wrapping
    Par dreydrey dans le forum Composants
    Réponses: 3
    Dernier message: 16/12/2003, 11h22

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