如果在QNetworkReply::finished
信号发出后发生崩溃,可能是由于回复对象的提前删除导致的。为了避免这种情况,您可以使用Qt的自动化连接功能来确保在处理完响应之前不会删除回复对象。
请尝试使用以下代码进行连接:
QNetworkReply *reply = manager->put(request, &file);
connect(reply, &QNetworkReply::finished, this, [=]() {
if (reply->error() == QNetworkReply::NoError) {
// 上传成功
qDebug() << "Upload successful";
} else {
// 发生错误
qDebug() << "Error occurred: " << reply->errorString();
}
// 清理网络回复对象
reply->deleteLater();
});
// 监听上传进度(可选)
connect(reply, &QNetworkReply::uploadProgress, this, [=](qint64 bytesSent, qint64 bytesTotal) {
int percent = static_cast<int>((bytesSent * 100) / bytesTotal);
qDebug() << "Uploading progress: " << percent << "%";
});
通过将this
作为接收器对象传递给connect()
函数,我们确保在执行完所有操作之前不会删除回复对象。这样可以避免潜在的崩溃问题。
另外,请确保在处理完成后正确释放和管理相关资源,并根据需要添加错误处理和容错机制。
内容由零声教学AI助手提供,问题来源于学员提问