无法使用Qt下载>= 1GB 的文件
Cannot download files >= 1GB with Qt
我有一个程序,应该通过网络下载文件。只要文件很小(<1GB),一切都很好。但是,当文件大于 1GB 时,会发生以下两种情况之一:
a) 如果我将来自 QNetworkReply 的信号与下载进度连接到我的一个插槽,应用程序崩溃并显示 std::bad_alloc
b) 如果我没有连接来自 QNetworkReply 的任何信号,应用程序将在 73% 时停止。
任何帮助都非常感谢。
这是我在连接和插槽中使用的代码:
QNetworkReply* reply = network_access_manager_->get(request);
connect(reply,SIGNAL(downloadProgress(qint64,qint64)),parent_,SLOT(downloadProgress(qint64,qint64)));
这是插槽:
void MainWindow::downloadProgress(qint64 bytesReceived,qint64 bytesTotal)
{
try
{
ui->label->setText(QString::number(bytesReceived));
ui->label_2->setText(QString::number(bytesTotal));
ui->progressBar->setRange(0,bytesTotal);
ui->progressBar->setValue(bytesReceived);
}
catch(std::exception& e)
{
qDebug() << e.what();
}
}
阅读 QNetworkReply 的文档:
QNetworkReply 是一个顺序访问 QIODevice,这意味着一旦 数据是从对象中读取的,它不再由设备保存。是的 因此,应用程序有责任保留此数据,如果它 需要。每当从网络接收更多数据时,并且 处理后,发出 readyRead() 信号。
因此,只需在下载过程中随时使用 readyRead() 信号从 QNetworkReply 读取,然后写入文件或任何您想要的地方。
在这里你可以找到一些其他的信息(特别是阅读Frank Osterfeld的答案):从URL下载Qt中的文件。
相关文章:
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 文本文件中的单词链表
- CMake-按正确顺序将项目与C运行时对象文件链接
- 使用新行和不使用新行读取文件
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 挂起和取消挂起一个文件DLL
- 如何确定我已使用非编码文件到达 EOF?
- 命名空间中具有.h和.cpp文件的类
- 如何使用ndk-build.cmd构建Android.so文件
- 从包含m行的文件中提取n行,必要时(惰性地)重复该文件
- 读取文件并输入到矢量中
- 写入超过 1GB 的.txt文件时出现奇怪的行为
- 如何有效地读取和存储 1GB 文本文件中的数据
- 无法使用Qt下载>= 1GB 的文件
- 在 C/C++ 中创建充满零的 1GB 文件的最快方法是什么?
- 在具有1GB RAM的机器上对1TB文件进行排序
- 我们如何将一个100gb的文件分割成100个1gb的文件?
- 如何克服读取大文件(超过1GB)时的内存错误——C/ c++
- 在C++中,将大型二进制(1GB-4GB)文件加载到内存中的最快方法是什么