Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Qt] télécharger un fichier

il veut pas se connecter...

Sujet résolu
Anonyme
    18 juin 2007 à 12:11:11

    EDIT : Le problème est résolu! il ne fallait pas mettre de non de variable dans la signature des fonction quand on les "connectes" (je sais c'est pas clair...désolé).

    Bonjour!

    J'ai encore un problème (décidément :euh: )

    Cette fois je veux télécharger un fichier (celui-là : exemple.wmaj)

    Mais il ne veut pas se connecter, j'ai fait un test avec QHttp::stat() et il me renvois 0, soit QHttp::Unconnected.


    /******************************************************************************/
    /*
    **  Cette application a pour but dans lancer le jeu Wigaab.
    **  Elle s'occupe notament de faire la màj automatiquement.
    */

    /******************************************************************************/


    /*******************************************************************************
            PRE-PROCESSOR
    *******************************************************************************/

    #include <QtGui> // pour les class comme QLabel
    #include <QtCore> // pour les class comme QString
    #include <QtNetwork> // pour les class comme QHttp QUrl


    /*******************************************************************************
            CLASS DEFINITION
    *******************************************************************************/

    class MainWindow : public QMainWindow
    {
        public:
            MainWindow();
            bool maj(); // maj = mise à jour (si tout est ok, return true)

        private:
            QLabel* c_background;
            QHttp* c_http;
            QFile* c_file;

        public slots:
            void httpDone(bool error);
    };


    /*******************************************************************************
            METHOD DEFINITION
    *******************************************************************************/

    // Class MainWindow :
    MainWindow::MainWindow()
    {
                                                               /// L'image de fond :
        // On indique que c'est l'enfant de MainWindow avec le pointeur this.
        c_background = new QLabel(this);

        QImage* image = new QImage(QString("logo.bmp"));
        if (image->isNull())
        {
            QMessageBox::information(this, "Wigaab", "Cannot load background");
            return;
        }
        c_background->setPixmap(QPixmap::fromImage(*image));
        delete image;

        setCentralWidget(c_background); // Permet l'affichage complet de l'image.

                                                             /// Le téléchargement :
        c_http = new QHttp(this);

                                                                 /// Les connect() :
        connect(c_http, SIGNAL(done(bool)), this, SLOT(httpDone(bool error)));
    }

    bool MainWindow::maj()
    {
        if (QFile::exists("exemple.wmaj"))
            QFile::remove("exemple.wmaj");

        c_file = new QFile("exemple.wmaj");

        // vérification de l'ouverture :
        if (!c_file->open(QIODevice::WriteOnly | QIODevice::Text))
        {
            QMessageBox::information(this, "Wigaab",
                                            "Cannot read the file!\nEXIT.");
            c_file->remove();
            delete c_file;
            return false;
        }

        c_http->setHost("http://hiura.123.fr", QHttp::ConnectionModeHttp);

        c_http->get("/wigaab/majauto/exemple.wmaj");

        // Test de connection :
        QFile out("out.txt");
        if (!out.open(QIODevice::WriteOnly | QIODevice::Text))
        {
            QMessageBox::information(this, "Wigaab",
                                            "Cannot read the file!\nEXIT.");
            c_file->remove();
            delete c_file;
            return false;
        }

        QTextStream streamToOut(&out);
        streamToOut << c_http->state(); /// PROBLEME : state = QHttp::Unconnected !!

        return true;
    }

    void MainWindow::httpDone(bool error)
    {
        if (error)
        {
            QMessageBox::information(this, "Wigaab", "Download Failed");
            c_file->remove();
            delete c_file;
            return;
        }

        QTextStream streamToFile(c_file);
        QString textDownloaded;
        textDownloaded.append(c_http->readAll());

        streamToFile << textDownloaded;

        c_file->close();
        delete c_file;
    }

    /*******************************************************************************
            MAIN
    *******************************************************************************/

    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
        QIcon* icon = new QIcon("favicone.gif");
        if (icon->isNull())
        {
            QMessageBox::information(0, "Wigaab", "Cannot load icon");
            return 0;
        }
        app.setWindowIcon(*icon);
        delete icon;

        MainWindow MyWindow;

        MyWindow.show();
        if (!MyWindow.maj()) // Si l'update ne s'est pas faite.
            return 0;

        return app.exec();
    }



    Je ne vois pas où j'ai fait une erreur, est-ce que j'ai oublié de configurer quelque chose?

    Merci de m'aider :D

    A bientôt
    Hiura

    PS : j'ai un autre soucis
    • Partager sur Facebook
    • Partager sur Twitter
      18 juin 2007 à 13:23:09

      tu peux t'aider de cet exemple (si ce n'est déjà fait)
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        18 juin 2007 à 13:30:07

        ben justement si...j'ai fouillé la doc de fond en comble (ou presque) ainsi que cette exemple, mais je n'ai pas trouvé pourquoi ça ne marchait pas...

        J'ai téléchargé avec succès le même fichier avec l'exemple qui est proposé, mais avec mon programme, ça ne marche pas...

        Merci quand même.
        • Partager sur Facebook
        • Partager sur Twitter
        Anonyme
          19 juin 2007 à 13:49:04

          Bonjour!

          J'ai revu mon code, fait le plus comme dans l'exemple, mais rien à y faire : Il ne veut toujours rien télécharger.

          Voici mon nouveau code :

          bool MainWindow::maj()
          {
              QUrl url("http://www.hiura.123.fr/wigaab/majauto/exemple.wmaj", QUrl::TolerantMode);
              QFileInfo fileInfo(url.path());
              QString fileName = fileInfo.fileName();
              if (QFile::exists(fileName))
                  QFile::remove(fileName);

              c_file = new QFile(fileName);

              // vérification de l'ouverture :
              if (!c_file->open(QIODevice::WriteOnly | QIODevice::Text))
              {
                  QMessageBox::information(this, "Wigaab",
                                                  "Cannot read the file!\nEXIT.");
                  c_file->remove();
                  delete c_file;
                  return false;
              }

              c_http->setHost(url.host(), QHttp::ConnectionModeHttp);

              c_http->get(url.path(), c_file);

              // Test de connection :
              QFile out("out.txt");
              if (!out.open(QIODevice::WriteOnly | QIODevice::Text))
              {
                  QMessageBox::information(this, "Wigaab",
                                                  "Cannot read the file!\nEXIT.");
                  c_file->remove();
                  delete c_file;
                  return false;
              }

              QTextStream streamToOut(&out);
              streamToOut << c_http->state(); /// PROBLEME : state = QHttp::Unconnected !!

              return true;
          }


          Il ne se connecte apparemment pas, et donc le signal de fin de téléchargement n'est jamais appelé.

          Merci de m'aider. :)

          Hiura
          • Partager sur Facebook
          • Partager sur Twitter
            19 juin 2007 à 17:29:09

            je pense avoir compris pourquoi.
            tu utilises un slot mais il n'y a pas la macro "Q_OBJECT" ainsi que :
            #include "ton_fichier.moc"
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              20 juin 2007 à 10:51:15

              Oui je n'avait pas mis le Q_OBJECT, je l'ai donc fait. J'ai séparer mon projet en deux : main.cpp et class.h, pour ne pas avoir de problème avec les 'vtable'.

              Mais je ne sais pas du tout ce que je dois faire avec le '.moc'...

              Pour compiler, j'utilise la console : qmake, puis make. Ca compile impec'. (Enfin je crois... :-° ).

              Mais ça ne change rien du côté de la connexion. C'est toujours avec le même statut : QHttp::Unconnected.

              Merci beaucoup quand même ;)

              (Mais j'ai pas compris à quoi servait Q_OBJECT au fait...)

              J'ai vérifié si l'url était valide et il l'est... Je n'y comprends plus rien là ... :(
              • Partager sur Facebook
              • Partager sur Twitter
                20 juin 2007 à 14:49:28

                Citation : hiura

                (Mais j'ai pas compris à quoi servait Q_OBJECT au fait...)


                çà permet à ta classe d'utiliser les signals/slots
                • Partager sur Facebook
                • Partager sur Twitter
                Anonyme
                  20 juin 2007 à 15:35:10

                  d'accord.

                  Et je dois faire quoi avec ce moc? je dois l'inclure où?
                  • Partager sur Facebook
                  • Partager sur Twitter
                  Anonyme
                    21 juin 2007 à 16:50:04

                    Bonjour.

                    Je n'ai toujours pas pu résoudre mon problème et j'ai vraiment besoin d'aide.
                    Je ne comprends pas ce que je fait de faut...

                    Et je doit inclure quel fichier .moc? (j'en ai pas trouvé dans le répertoire...il y a seulement un fichier "moc_class.cpp" je fais quoi avec?)

                    Je dois aussi remettre en cause ma façon de compiler. Est-ce que je fais juste? (qmake -Wall -Wlogic, puis make -Wall)

                    Merci de m'aider.

                    A bientôt
                    Hiura
                    • Partager sur Facebook
                    • Partager sur Twitter
                      22 juin 2007 à 10:15:15

                      le "#include main.moc" c'était au cas où tu laissais tout dans le même fichier, sinon suffit de rajouter le fichier ***_moc.cpp lors de la compilation.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        22 juin 2007 à 12:23:13

                        Ajoute à ton projet ce fichier moc. A TON PROJET.
                        • Partager sur Facebook
                        • Partager sur Twitter
                        Anonyme
                          22 juin 2007 à 12:31:36

                          Ok donc je n'ai pas à me soucier des "moc"?

                          @Conficius: je n'ai pas de projet...

                          J'utilise un fichier .pro :
                          HEADERS     += class.h
                          SOURCES     += main.cpp
                          FORMS       +=

                          INCPATH     += C:\Qt\4.3.0\include
                          INCPATH     += C:\Qt\4.3.0\include\Qt
                          INCPATH     += C:\Qt\4.3.0\include\QtCore
                          INCPATH     += C:\Qt\4.3.0\include\QtGui
                          INCPATH     += C:\Qt\4.3.0\include\QtNetwork

                          QT          += core
                          QT          += network

                          CONFIG      += qt
                          CONFIG      += debug
                          CONFIG      += warn_on
                          CONFIG      += resources

                          TARGET      = Wigaab_boot
                          DESTDIR     = bin/
                          DLLDESTDIR  = bin/
                          MOC_DIR     = moc_files/
                          OBJECTS_DIR = obj/



                          Et j'ai cette sortie console quand je compile :

                          J:\hiura\PROGRAMMATION!\C++\Wigaab\Wigaab Qt Boot 0.1.0>qmake -Wall -Wlogic
                          WARNING: Operator=(QMAKE_EXT_OBJ) clears variables previously set: c:\Qt\4.3.0\mkspecs\win32-g++\qmake.co
                          nf:14

                          J:\hiura\PROGRAMMATION!\C++\Wigaab\Wigaab Qt Boot 0.1.0>make -Wall
                          mingw32-make -f Makefile.Debug
                          mingw32-make[1]: Entering directory `J:/hiura/PROGRAMMATION!/C++/Wigaab/Wigaab Qt Boot 0.1.0'
                          g++ -c -g -Wall -frtti -fexceptions -mthreads -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_GUI_LIB -DQT
                          _NETWORK_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"c:\Qt\4.3.0\include\QtCore" -I"c:\Qt\4
                          .3.0\include\QtCore" -I"c:\Qt\4.3.0\include\QtNetwork" -I"c:\Qt\4.3.0\include\QtNetwork" -I"c:\Qt\4.3.0\i
                          nclude\QtGui" -I"c:\Qt\4.3.0\include\QtGui" -I"c:\Qt\4.3.0\include" -I"c:\Qt\4.3.0\include" -I"c:\Qt\4.3.
                          0\include\Qt" -I"c:\Qt\4.3.0\include\QtCore" -I"c:\Qt\4.3.0\include\QtGui" -I"c:\Qt\4.3.0\include\QtNetwo
                          rk" -I"c:\Qt\4.3.0\include\ActiveQt" -I"moc_files" -I"." -I"c:\Qt\4.3.0\mkspecs\win32-g++" -o obj\main.o
                          main.cpp
                          C:/Qt/4.3.0/bin\moc.exe -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_GUI_LIB -DQT_NETWORK_LIB -DQT_CORE
                          _LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"c:\Qt\4.3.0\include\QtCore" -I"c:\Qt\4.3.0\include\QtCore" -
                          I"c:\Qt\4.3.0\include\QtNetwork" -I"c:\Qt\4.3.0\include\QtNetwork" -I"c:\Qt\4.3.0\include\QtGui" -I"c:\Qt
                          \4.3.0\include\QtGui" -I"c:\Qt\4.3.0\include" -I"c:\Qt\4.3.0\include" -I"c:\Qt\4.3.0\include\Qt" -I"c:\Qt
                          \4.3.0\include\QtCore" -I"c:\Qt\4.3.0\include\QtGui" -I"c:\Qt\4.3.0\include\QtNetwork" -I"c:\Qt\4.3.0\inc
                          lude\ActiveQt" -I"moc_files" -I"." -I"c:\Qt\4.3.0\mkspecs\win32-g++" -D__GNUC__ -DWIN32 class.h -o moc_fi
                          les\moc_class.cpp
                          g++ -c -g -Wall -frtti -fexceptions -mthreads -DUNICODE -DQT_LARGEFILE_SUPPORT -DQT_DLL -DQT_GUI_LIB -DQT
                          _NETWORK_LIB -DQT_CORE_LIB -DQT_THREAD_SUPPORT -DQT_NEEDS_QMAIN -I"c:\Qt\4.3.0\include\QtCore" -I"c:\Qt\4
                          .3.0\include\QtCore" -I"c:\Qt\4.3.0\include\QtNetwork" -I"c:\Qt\4.3.0\include\QtNetwork" -I"c:\Qt\4.3.0\i
                          nclude\QtGui" -I"c:\Qt\4.3.0\include\QtGui" -I"c:\Qt\4.3.0\include" -I"c:\Qt\4.3.0\include" -I"c:\Qt\4.3.
                          0\include\Qt" -I"c:\Qt\4.3.0\include\QtCore" -I"c:\Qt\4.3.0\include\QtGui" -I"c:\Qt\4.3.0\include\QtNetwo
                          rk" -I"c:\Qt\4.3.0\include\ActiveQt" -I"moc_files" -I"." -I"c:\Qt\4.3.0\mkspecs\win32-g++" -o obj\moc_cla
                          ss.o moc_files\moc_class.cpp
                          g++ -enable-stdcall-fixup -Wl,-enable-auto-import -Wl,-enable-runtime-pseudo-reloc -mthreads -Wl -Wl,-sub
                          system,windows -o "bin\Wigaab_boot.exe" obj\main.o obj\moc_class.o  -L"c:\Qt\4.3.0\lib" -lmingw32 -lqtmai
                          nd -lQtGuid4 -lQtNetworkd4 -lQtCored4
                          copy /y "bin\Wigaab_boot.exe" bin
                          Impossible de copier le fichier sur lui-même.
                                  0 fichier(s) copié(s).
                          mingw32-make[1]: [bin\Wigaab_boot.exe] Error 1 (ignored)
                          mingw32-make[1]: Leaving directory `J:/hiura/PROGRAMMATION!/C++/Wigaab/Wigaab Qt Boot 0.1.0'

                          J:\hiura\PROGRAMMATION!\C++\Wigaab\Wigaab Qt Boot 0.1.0>

                          (Pour l'erreur qui apparait je suppose que ce n'est pas grave.)

                          Mais j'ai toujours ce problème de connexion...ça peut venir d'où??
                          • Partager sur Facebook
                          • Partager sur Twitter
                            22 juin 2007 à 12:37:30

                            Donc tu dois rajouter cette ligne non ?

                            SOURCES += moc_class.cpp
                            • Partager sur Facebook
                            • Partager sur Twitter
                            Anonyme
                              22 juin 2007 à 13:18:18

                              si je fais ça, il me sorts :


                              J:\hiura\PROGRAMMATION!\C++\Wigaab\Wigaab Qt Boot 0.1.0>qmake
                              WARNING: Failure to find: moc_class.cpp
                              WARNING: Failure to find: moc_class.cpp


                              ce qui est logique, puisqu'il n'existe pas encore...
                              (idem si je mets : SOURCES += moc_files/moc_class.cpp)
                              • Partager sur Facebook
                              • Partager sur Twitter

                              [Qt] télécharger un fichier

                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                              • Editeur
                              • Markdown