دانلود فایل



  • p{direction:rtl; text-align:right}. سلام
    برای دانلود یه فایل http اینو نوشتم ولی خطا می‌ده
    @ QHttp http;
    QFile *file = new QFile("fileName");
    file->open(QIODevice::WriteOnly);
    http.setHost("http://doc.qt.nokia.com",80);
    int httpGetId=http.get("/qtcreator-2.1-snapshot/creator-qml-application.html",file);@



  • p{direction:rtl;text-align:right}. این کد قراره چیکار کنه؟؟
    "اینجارو ببین":http://doc.qt.nokia.com/4.7-snapshot/network-download-main-cpp.html



  • p{direction:rtl; text-align:right}. من می‌خوام یه فایل متنی رو با برنامم دانلود کنم و بعد بخونمش

    p{direction:rtl; text-align:right}. البته اگه نیازی به دانلود نباشه هم بهتره
    مثلا خود کیوت فایل رو توی سرور باز کنه و بخونتش بدون اینکه دانلودش کنه

    p{direction:rtl; text-align:right}. فرض کنید یه فایل متنی توی این آدرسه
    http:\server.com\version.txt
    و شماره نسخه برنامه توشه مثلا ۱٫۰
    حالا می‌خوام برنامه این شماره رو بخونه و چک کنه که آپدیت لازم هست یا آخرین نسخه در حال استفادست.



  • p{direction:rtl;text-align:right}. سلام
    بهترین کار اینه که یک کلاس بسازی :

    @
    class MyClass : public QObject
    {
    Q_OBJECT

    public:
    MyClass();
    void fetch();

    public slots:
    void replyFinished(QNetworkReply*);

    private:
    QNetworkAccessManager* m_manager;
    };
    @

    بعد به این شکل ازش استفاده کنی :

    @

    MyClass::MyClass()
    {
    m_manager = new QNetworkAccessManager(this);

    connect(m_manager, SIGNAL(finished(QNetworkReply*)),
         this, SLOT(replyFinished(QNetworkReply*)));
    

    }

    void MyClass::fetch()
    {
    m_manager->get(QNetworkRequest(QUrl("آدرس فایل")));
    }

    void MyClass::replyFinished(QNetworkReply* pReply)
    {

    QByteArray data=pReply->readAll();
    QString str(data);
    ......
    

    }
    @



  • p{direction:rtl; text-align:right}. عباس جان ممنون

    p{direction:rtl; text-align:right}. این خطا رو میده
    error: undefined reference to `QNetworkAccessManager::QNetworkAccessManager(QObject*)'

    p{direction:rtl; text-align:right}. می‌شه یه تابع بنویسی که این کار رو بکنه (نه یه کلاس)



  • @
    #include <QtNetwork>
    #include <QNetworkAccessManager>
    #include <QUrl>
    @

    p{direction:rtl;text-align:right}. اینارو اینکلود کردی؟
    اینکارو بکن اگر نشد بگو تا 2 تا روش دیگه هم هست اونارو هم تست کنیم

    @
    QT += network
    @

    p{direction:rtl;text-align:right}. اینم به فایل .pro پروژت باید اضافه کنی



  • p{direction:rtl;text-align:right}. تابعی که وصل به هیچ کلاسی نباشه مطمئنا نمیتونه این کارو انجام بده
    چون network مبحث گسترده ای هست
    برای خود منم جای سوال بود که چرا توی C# با 4 خط کد براحتی اینکارو انجام میدادم ولی تو کیوت نمیشه
    بعد که تحقیق کردم دیدم تمامی این کلاسهارو از قبل توی دات نت فریم ورک نوشتن و شما فقط توسط namespace ها و functions ها فراخوانیشون میکنید و اصلا کلاس رو نمیبینید!
    اما اینجا خوبیش اینه که حتی می تونید برنامه ریزی کنید که چطوری به هدف برسید و در راه اگر مشکلاتی بود برطرف کنید که در سی شارپ چنین ویژگی هایی یافت نمیشه،و خودتون باید کلاسشو بنویسید که کار هر برنامه نویسی نیست!



  • p{direction:rtl; text-align:right}. ممنون به خاطر توضیحاتت
    اون QT += network رو به فایل پروژه اضافه کردم درست شد
    اما هنوز دانلود نمیکنه انگار
    من str رو توی هدر کلاس public کردم و بیرون کلاس با QMessageBox::information(this,"f", myClass->str); هیچی چاپ نمیشه

    @#include <QtNetwork/QNetworkReply>
    #include <QtNetwork/QNetworkAccessManager>
    #include <QUrl>

    class downloadUpdate : public QObject
    {
    Q_OBJECT

    public:
    downloadUpdate();
    void fetch();
    QString str;

    public slots:
    void replyFinished(QNetworkReply*);

    private:
    QNetworkAccessManager* m_manager;

    };@

    ====================

    @#include "downloadupdate.h"

    downloadUpdate::downloadUpdate()
    {
    m_manager = new QNetworkAccessManager(this);

    connect(m_manager, SIGNAL(finished(QNetworkReply*)),
         this, SLOT(replyFinished(QNetworkReply*)));
    

    }

    void downloadUpdate::fetch()
    {
    m_manager->get(QNetworkRequest(QUrl("https://github.com/silvergit/tictactoe/blob/master/Authors")));
    }

    void downloadUpdate::replyFinished(QNetworkReply* pReply)
    {

    QByteArray data=pReply->readAll();
    str=data;
    

    }@



  • p{direction:rtl;text-align:right}. str رو اینجوری پر کن

    @
    QByteArray data=pReply->readAll();
    QString str(data);
    @



  • خب وقتی توی هدر تعریفش می کنم که دیگه نمی شه اینطوری پرش کرد



  • p{direction:rtl;text-align:right}. خب بیارش تو cpp تعریف کن.این کد دقیقا به این صورتی که نوشته شده کار میکنه.
    پیشنهاد میکنم عین کد رو استفاده کن اگر موفق شدی توسعش بده
    موفق باشی ;)



  • p{direction:rtl;text-align:right}. راستی اگر کار نکرد آدرسو به این تغییر بده ببین فایل مستقیم رو میخونه
    @
    m_manager->get(QNetworkRequest(QUrl("http://www.catonmat.net/download/awk.cheat.sheet.txt")));
    @


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.