- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要一个文件的校验和并找到this ,效果很好。现在我想更改此函数以获取指向之前已使用以下行打开的 QIODevice
的指针:
if (!file.open(QFile::ReadOnly | QFile::Text))
{
...
}
这作为设备传递给 read (reader.read(&file);
):
bool XmlReader::read(QIODevice* device)
{
QByteArray b = fileChecksum(device);
...
}
这是我对 fileChecksum 的实现。它返回一个校验和,但我永远陷入了一个循环,并且我收到了一个 xml 解析错误。我在这里做错了什么?
QByteArray XmlReader::fileChecksum(QIODevice* device)
{
if (device->isOpen())
{
QCryptographicHash hash(QCryptographicHash::Sha256);
if (hash.addData(device)) {
return hash.result();
}
}
return QByteArray();
}
编辑
在 QByteArray b = fileChecksum(device);
之后我这样做:
qDebug() << "Checksum: " << b.toHex();
which 继续打印,打印,打印...
解析错误是:premature end of document
这是垃圾。
希望这对您有所帮助。
最佳答案
由于最终导致错误的代码行不在 View 中,我只能推测发生了什么。
调用hash.addData(device)
的函数fileChecksum
读取QIODevice until the end并将光标位置保持在那里。
您之后很可能尝试从 QIODevice 读取,这将解释 premature end of documen
消息。
作为一种快速的解决方法,您可以尝试在之后重置位置
auto pos = device->pos();
QByteArray b = fileChecksum(device);
device->seek(pos);
但是如果可以的话,您应该只读取一次数据(也支持非随机访问的 QIODevices)。例如,您可以将结果存储在 QBuffer 中并将其用作 QIODevice。像这样:
bool XmlReader::read(QIODevice* device)
{
QByteArray contents = device->readAll();
QBuffer buffer(&contents);
device = &buffer;//you can also just use &buffer from here on out instead of overwriting the pointer
QByteArray b = fileChecksum(device);
device->reset();
/* ... further reads from device here */
}
关于c++ - 获取打开的 QIODevice 的校验和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40583840/
我想从 QIODevice 继承子类,因为我正在创建我的自定义设备(自定义串行端口对象)。 我看到了: writeData(const char *, qint64 ) : qint64 readDa
我需要一个文件的校验和并找到this ,效果很好。现在我想更改此函数以获取指向之前已使用以下行打开的 QIODevice 的指针: if (!file.open(QFile::ReadOnly | Q
软呢帽上的 qt5.7 检查了这个audio-to-chart example并发现 QIODevice::writeData 用于读取麦克风输入。由于它有效并且正在绘制来自麦克风的数据,因此该功能显
我正在使用 qt 5.3。 我有一个很大的东西写入 QIODevice 以供读取。我想要一个代理来获取数据,同时让 QIODevice 中的数据可供其他东西读取。因此,如果我调用 readAll(),
我试图从文件中读取并放入文本编辑中,但它一直说 QIODevice::read:device not open。 .txt 文件与我的 .qrc 和 .cpp 文件位于同一位置。我正在按照网上的分步指
我得到错误: QIODevice::write (QTcpSocket): device not open. After trying , I think problem is passing par
我想使用 QMediaPlayer 制作音频流程序(如电话) , QAudioProbe和 QAudioOutput Qt 5.3.0 MSVC2012 OpenGL 32 位中的类。 这是我的代码:
我正在尝试将所有传出的 POST 数据保存在 QtWebKit 中。 我使用覆盖 来做到这一点QNetworkReply *QNetworkAccessManager::createRequest(O
Qt 5.7 根据文档,QAudioDecoder不支持流媒体。但它接受文件名或 QIODevice 作为源。出现了“好主意”:让我们子类化 QIODevice 来创建流媒体支持。 但我总是收到错误:
我想使用一些标准的QUdpSocket 方法,确切地说是read() 和readAll()。所以,根据QUdpSocket的文档: If you want to use the standard QI
如果我想将数据写入远程端并等待它的响应,我至少需要一个waitForReadyRead。但在调用它之前,我是否需要使用 waitForBytesWritten 手动刷新输出队列,或者 Qt 会自动为我
我正在尝试为实时音频应用程序实现双缓冲区,QAudioInput 要求它是QIODevice 的子类。我发现此方法的文档非常困惑。 首先,文档中的方法签名与 QT 5.9.2 的 header 不匹配
我正在对 QIODevice 类进行子类化,以通过 QAudioInput 和 QAudioOutput 实例编写和读取语音。但是当我用耳机读它时,声音几乎每隔几毫秒就会中断一次。它发出的声音非常糟糕
我尝试在 docker 容器中构建应用程序。 如果我在我的主机上构建这个镜像,一切顺利。如果我将它推送到 git,hub.docker 会在构建日志中显示以下错误: Step 12/22 : RUN
我是 Qt 的新手,我正在学习它的 Getting Started页。我想知道以下语句是什么意思,为什么需要它们? 在打开功能中: if (!file.open(QIODevice::ReadOnly
我正在编写基于 QCoreApplication 的控制台应用程序,我想在用户向标准输入输入内容时获取信号(一次整行或按字符输入,这对我的应用程序并不重要) . QFile 根据文档不发出信号,所以如
我正在尝试在 PySide 中子类化 QFile 以实现自定义读取行为。但是,如下面的简化代码所示,即使子类的 readData 实现只是调用了父类的 readData 函数,返回的数据也是不正确的。
我希望我的 QT 应用程序将某些日志存储在不同的文件中。我一直在使用 qDebug() open(QIODevice::WriteOnly|QIODevice::Append)){ // Th
当我编译我的程序时,我收到错误消息“QIODevice::write: device not open”这个程序在我的旧电脑上运行但由于某种原因它在我的新电脑上不运行。非常感谢任何有关如何修复此错误的
Qt 4.8 documentation包含以下建议: If you want to use the standard QIODevice functions read(), readLine(),
我是一名优秀的程序员,十分优秀!