【发布时间】:2015-05-29 15:53:16
【问题描述】:
我正在制作一个用于从 FTP 服务器下载文件的 Qt5 QCoreApplication(从 HTTP 开始,现在已切换)。
我的程序要关闭时遇到问题。在我将exit(0) 添加到downloader.cpp 之后,我的程序现在结束了,但是我收到以下错误:
QWaitCondition:在线程仍在等待时销毁。
我的代码如下:
main.cpp
#include <QCoreApplication>
#include <downloader.h>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
Downloader d;
d.doDownload();
a.exec();
}
**downloader.cpp**
#include "downloader.h"
Downloader::Downloader(QObject *parent) :
QObject(parent)
{
}
void Downloader::doDownload() {
manager = new QNetworkAccessManager(this);
connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*)));
manager->get(QNetworkRequest(QUrl("ftp://ftp.fao.org/Public/GIEWS/windisp/40manual/wd4en.pdf")));
}
void Downloader::replyFinished (QNetworkReply *reply)
{
if(reply->error()) {
qDebug() << "ERROR!";
qDebug() << reply->errorString();
}
else
{
qDebug() << "Download finished!";
QFile *file = new QFile("C:/Users/jelicicm/Desktop/wd4en.pdf");
if(file->open(QFile::Append))
{
file->write(reply->readAll());
file->flush(); file->close();
qDebug() <<"Downloaded file size:" <<(file->size())/1024<<"KB";
}
delete file;
}
reply->deleteLater();
exit(0);
}
我得到以下输出:
下载完成!下载的文件大小... QWaitCondition: Destroyed 而线程仍在等待。
据我所知,我想象的一切都完成了。下载文件,并显示其大小。但我想这个错误一定意味着什么。
有人可以向我解释这个错误是什么,为什么会发生以及如何修补它?
【问题讨论】:
-
尝试使用 qApp->exit(0)。由于您的下载器类是一个 QObject,您还可以创建并发出一个信号来代替“完成”之类的退出调用,并将下载器的“完成”连接到“QCoreApplication::quit()”插槽。
-
qApp->exit(0) 没有什么好处。将尝试通过连接两个信号来做点什么...谢谢您的回复!
标签: qt download ftp qt5 qcoreapplication