Подскажите пожалуйста как их подружить, если я организовываю скачивание в главном потоке то всё отлично, если пытаюсь сделать закачку в вторичном потоке то всё плохо вот исходник
#include <QtCore/QCoreApplication>
#include <QNetworkAccessManager>
#include <QNetworkReply>
#include <QDebug>
#include <QFile>
#include <QThread>
#define USAGE QT_TRANSLATE_NOOP("threadDownload::main", "usage: %s <link> <file name>")
class ThreadHttpDownload : public QThread
{
Q_OBJECT
public:
ThreadHttpDownload(QObject *parent,QString link);
QNetworkReply *reply;
QFile file;
QString link;
void run();
private:
private slots:
void readyRead();
void replyFinished(QNetworkReply*);
};
ThreadHttpDownload::ThreadHttpDownload(QObject *parent,QString _link)
:QThread(parent)
{
link = _link;
}
void ThreadHttpDownload::run()
{
file.setFileName("download.file");
file.open(QIODevice::WriteOnly);
QNetworkRequest request; // Формируем запрос
request.setUrl(QUrl(link));
QNetworkAccessManager manager;
manager.moveToThread(this);
reply = manager.get(request); //Отправляем запрос
reply->moveToThread(this);
connect(&manager, SIGNAL(finished(QNetworkReply*)),
this, SLOT(replyFinished(QNetworkReply*)));
connect(reply,SIGNAL(readyRead()),this,SLOT(readyRead()));
exec();
}
void ThreadHttpDownload::readyRead()
{
qDebug() << reply->size();
file.write(reply->readAll());
}
void ThreadHttpDownload::replyFinished(QNetworkReply *reply)
{
if (reply->error())
{
qDebug() << "error download" << reply->errorString();
QCoreApplication::quit();
}else
{
qDebug() << "download complete";
file.close();
QCoreApplication::quit();
}
}
int main(int argc, char *argv[])
{
if (argc < 2)
{
qDebug(USAGE, argv[0]);
return 0;
}
QCoreApplication a(argc, argv);
ThreadHttpDownload *th = new ThreadHttpDownload(0,argv[1]);
th->start();
return a.exec();
}
#include <main.moc>
вот в этом куске всё падает
file.write(reply->readAll());
где я туплю
, уже несколько дней разобраться немогу