问题标签 [qiodevice]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
48 浏览

qt - QTBUG-26538 的解决方法

我正在开发一个必须在 ubuntu 14.04 上运行的应用程序,它捆绑了 qt 5.2.1。
我使用 QUdpSocket 作为 QIODevice,所以我首先绑定到我的服务器接受数据报的端口,然后调用 connectToHost()。
不幸的是,我不得不面对[QTBUG-26538] QUdpSocket: connectToHost() 重置由 bind() 指定的本地端口号
有一些解决方法吗?

0 投票
1 回答
773 浏览

c++ - 编写具有 2 个通道的自定义 QIODevice

我正在尝试实现自定义 QIODevice。

我有检测器,它将使用 2 个 tcp 套接字,一个用于发送命令和接收响应,另一个用于读取数据。

我该怎么做?我试图创建我的类,从 QIODevice 派生它并实现纯虚拟方法,但我遇到了一些困难。

我有以下代码:

所以基本上我的问题是,我如何处理这些渠道,因为例如qt documentation我有这个

bool QIODevice::open(OpenMode mode)

打开设备并将其 OpenMode 设置为 mode。成功则返回真;否则返回假。应该从 open() 的任何重新实现或打开设备的其他函数中调用此函数。

所以我必须从我的重写Open()方法中调用它,但是我查看了这个方法的实现,我看到它正在将通道数设置为 1。我该如何更改这个数字?

我从 QIODevice 继承的那些缓冲区有什么用,我应该如何使用它们?

我错过了创建自定义 QIODevice 的意义吗?如果是这样,请给我解释一下。

0 投票
1 回答
314 浏览

qt - 子类化 QIODevice:QUdpSocket 的包装器

我正在尝试在QUdpSocket上实现我自己的包装器,因为它使用起来不舒服。我可以使用它,但无论如何我需要实现一些中间缓冲区来访问QDataStream操作。另外的:

我继承QIODevice
标题(有点简化):

.cpp 文件:

来自QIODevice::readData()上的 Qt 文档

..当重新实现这个函数时,这个函数在返回之前读取所有需要的数据是很重要的。为了使 QDataStream 能够对类进行操作,这是必需的。QDataStream 假定所有请求的信息都已读取,因此如果出现问题不会重试读取...:

问题是在第一次读取后我有空缓冲区,因此我的bytesAvailable()方法返回 0:

因此,在使用该类时,我无法找出可用的字节数,例如:

如何QUdpSocket正确编写自己的包装器?
使用中间缓冲区的想法很有效,直到我决定将逻辑移动到单独的QIODevice派生类。

0 投票
1 回答
404 浏览

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

我正在尝试为实时音频应用程序实现双缓冲区,并QAudioInput要求它是QIODevice. 我发现这种方法的文档非常混乱。

首先,文档中的方法签名与 QT 5.9.2 的标头不匹配,该标头具有virtual qint64 writeData(const char *data, qint64 len) = 0;.

文档虽然有这个签名:qint64 QIODevice::writeData(const char *data, qint64 maxSize)

maxSize参数让我感到困惑,因为它意味着我可以缓冲一些数据,文档还暗示:

maxSize从数据向设备写入最多字节。返回写入的字节数,或者-1是否发生错误。

然而,紧接着文档就这么说了,这对我来说似乎是矛盾的:

重新实现此函数时,重要的是此函数在返回之前写入所有可用数据。为了QDataStream能够对类进行操作,这是必需的。QDataStream假定所有信息都已写入,因此如果出现问题不会重试写入。

那么我的QIODevice实现是否负责在一次调用中缓冲所有数据?

0 投票
2 回答
350 浏览

linux - QT 和 I/O 可能的错误

请从 QT C++ 的角度描述“可能的 I/O”SIGIO 错误通常表示什么。我知道 I/O 代表输入/输出,但这就是我所知道的。我发现的唯一体面的信息是:http ://davmac.org/davpage/linux/async-io.html但它太通用了,无法帮助我解决我的问题。

我不一定需要一个答案来确切地告诉我我做错了什么(如下),但希望获得关于哪些活动通常会导致此错误以及它表明您做错了什么的更详细的答案。


剩下的部分会给你一个关于我正在做的活动的想法,但你的答案需要完全针对这个部分(我的代码),并且可以只描述错误指示的内容以及与之相关的任何特定 QT 信息

我有时在第一次循环时收到此错误,有时在 5 次左右循环后收到此错误。它使gui崩溃。这发生在 linux 上的 qt 4.8 中。下面是一段类似的代码,它发生在我的主 gui 的 QThread 上。

在我的完整代码中,在 example() 中,我还有一个事件循环,完成后,删除的 qbuff 和 audioOutput。该错误似乎来自不同的代码位置,最常见的是在事件从事件循环更改为 idleState 之后,但实际问题应该源于所示代码。我还尝试将 callExample() 中的循环移动到我的事件循环内部,甚至从我的主线程(因此每次调用创建一个新线程),但我仍然遇到问题。如果没有循环并且该函数仅被调用一次,或者如果代码发生在我的主 gui 而不是 qthread 中,我似乎没有收到错误。

0 投票
1 回答
657 浏览

c++ - 无法读取写入的 Qt QBuffer 字节

这里有点混乱:我正在尝试这样做:

这将输出以下内容:

最后一行真的让我很困惑。我认为 .write() 方法的返回值应该说明写入了多少字节?为什么它们不可用?

而且,后来,我尝试了以下操作:

考虑到前面的 bytesAvailable 结果,这些调用的输出并不太令人惊讶。他们输出以下内容:

所以我觉得我错过了一步,你必须在写入和可供读取的数据之间做一些事情。也许某种寻求或什么?但我似乎错过了文档中的说明。

任何提示将不胜感激。谢谢!

0 投票
2 回答
3506 浏览

qt - 如何双向通信 Qt 应用程序

我想在我的 Qt 应用程序之间创建双向通信。我想使用 QProcess 来做到这一点。我从根应用程序成功调用子应用程序并发送测试数据而没有任何错误,但我无法在子应用程序中接收任何数据。我将不胜感激任何帮助。我正在使用 Qt 4.7.1。在我的测试代码下面:

根应用程序:

子应用:

0 投票
1 回答
331 浏览

c++ - 为什么当基类是 QFile 时我不能从 QIODevice 重新实现方法?

当我的基类是 QIODevice 时,我可以重新实现 writeData 和 readData,但如果基类是 QFile,它就不起作用。OFile 的基类是 QFileDevice,QFileDevice 的基类是 QIODevice:

打电话时

writeDatafromxyseriesiodevice仅在基类为QIODevice

谢谢!!

0 投票
0 回答
235 浏览

windows - 将 QIODevice 与匿名管道一起使用

如果数据可用,我想使用QIODevice来读取未命名的管道。我用 QFile 试过这个:

“原始”管道本身可以工作,我可以从中读取数据。但是,在测试期间,readyRead() 永远不会发出信号:

NumBytes 始终为 0,canReadLine() 始终返回 false,而 readAll() 未返回。ReadFile() 可以读取预期的数据。

是否有用于匿名管道的QOIDevice ?Qt 文档说QLocalSocket应用于命名管道,但我没有找到任何关于匿名管道的信息。

0 投票
1 回答
87 浏览

python - 从 QIODevice.read() 读取后如何处理数据?

这是我第一次提问,如果有什么不对的地方,请告诉我,我将不胜感激。

我正在使用 QWebEngineUrlSchemeHandler 作为自定义 url,并且我想使用 QFile 打开一个 javascript 文件进行测试。

首先,如果我只是使用

该窗口可以打开 javascript,但如果我使用自定义 QFile,我不知道在从 QIODevice.read() 读取数据后如何处理数据。

我想知道在从 QIODevice.read() 读取数据后,我需要做什么才能使窗口可以打开 javascript。

请给我一些建议,谢谢。

这是我的完整代码。