c++ - 如何确定用于读取的 QIODevice 的总大小?

标签 c++ qt qiodevice

我正在使用 qt 5.3。

我有一个很大的东西写入 QIODevice 以供读取。我想要一个代理来获取数据,同时让 QIODevice 中的数据可供其他东西读取。因此,如果我调用 readAll(),我将在代理中获得一切正常,但其他读取器无法获得任何数据。

我想我应该使用 peek() 但这似乎需要最大尺寸。我尝试传递 size() 或 bytesAvailable() 但他们没有给我真正的大小。他们返回的缓冲区大小可能是一些奇怪的值,如 3287。但我的数据有 1081530 字节那么大。

如何获取 QIODevice 的真实大小以供读取?

编辑:我上面提到的 QIODevice 实际上是 QNetworkReply。我想创建一个代理来观察我的程序的请求和响应数据,并使用 QWebView 访问一些 flash 游戏。我实现了我的 QNetworkAccessManager 子类的 createRequest,我想分析的是我通过 createRequest 回复的 finished() 信号捕获的。

Edit2:我注意到这个 QIODevice 是连续的,所以大小未知。但是如何在不清除数据的情况下读取数据呢?

最佳答案

可以使用QIODevice::seek,然后再次读取数据
来自 seek 文档:

For random-access devices, this function sets the current position to pos, returning true on success, or false if an error occurred. For sequential devices, the default behavior is to do nothing and return false.

关于c++ - 如何确定用于读取的 QIODevice 的总大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25137660/

相关文章:

c++ - 等效于 Qt 5 中的 ASP.NET 分部 View

c++ - 使用 2 个 channel 编写自定义 QIODevice

c++ - 指向对象及其析构函数的指针

c++ - Websocket 广播不工作

c++ - Qt Quick + CMake + 自定义 QObject 导致对 `vtable' 的 undefined reference

c++ - 如何在原生 C++ 中使用 QML 绘制二维码

c# - 当它的一些参数是委托(delegate)时,是否可以在 C# 中使用 "C++ Library Function"?

c++ - 在C++中对while循环进行多线程

c++ - 自定义 QAbstractNetworkCache 实现; QAbstractNetworkCache::insert(QIODevice *device) 设备没有数据

c++ - 实现 QIODevice::writeData,混淆文档