gpt4 book ai didi

c++ - 如何增加 QNetworkReply::downloadProgress 信号频率?

转载 作者:行者123 更新时间:2023-11-28 05:12:46 24 4
gpt4 key购买 nike

我正在尝试将进度观察添加到 Qt 的 FileDownloader例子。
它可以工作,但不是我想要的方式 - downloadProgress 信号太罕见了!
大约 300 Kb 文件只需两次。

这使得无法在 GUI 中流畅地显示下载进度。

代码:

...
QNetworkReply* reply = m_WebCtrl.get(request);
connect(reply, SIGNAL(downloadProgress(qint64,qint64)), SLOT(onDownloadProgress(qint64,qint64)));

void FileDownloader::onDownloadProgress(qint64 bytesReceived, qint64 bytesTotal)
{
qDebug() << "Download progress:" << bytesReceived << bytesTotal;
}

输出:

下载进度:19954 from -1
下载进度:288322 from -1
下载进度:288322 from 288322

有没有办法让 downloadProgress 信号来得更频繁?

附言libcurl进度回调日志:

下载进度:2753 of 0
下载进度:4141 of 0
下载进度:5995 of 0
下载进度:7383 of 0
...

最佳答案

TL;DR 最简单的方法是重新编译 Qt 并更改以下行:

// in qtbase/src/network/access/qnetworkreply.cpp
const int QNetworkReplyPrivate::progressSignalInterval = 100;

...具有低于 100 的值(以毫秒为单位)。


如果查看 QNetworkReply(和相关类)的 Qt 源代码,您会发现以下内容:

if (downloadProgressSignalChoke.elapsed() >= progressSignalInterval) {
downloadProgressSignalChoke.restart();
emit q->downloadProgress(bytesDownloaded,
totalSize.isNull() ? Q_INT64_C(-1) : totalSize.toLongLong());
}

因此您可以看到控制信号发射的是 downloadProgressSignalChokeprogressSignalInterval

  • downloadProgressSignalChoke 是一个 QElapsedTimer这是私有(private) Qt 类 QNetworkReplyPrivate 的成员,据我所知,您不能更改返回的持续时间(以毫秒为单位)。
  • progressSignalIntervalQNetworkReplyPrivate 的静态常量成员,其值在qnetworkreply.cpp 中定义为100:
const int QNetworkReplyPrivate::progressSignalInterval = 100;

这意味着刷新间隔(显然)设置为恒定的 100 毫秒。

关于c++ - 如何增加 QNetworkReply::downloadProgress 信号频率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43204220/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com