问题标签 [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 回答
495 浏览

c++ - 未发出 qextserialport 中的 readyRead() 信号

我正在使用qextserialport与 Windows 8.1 上的蓝牙设备进行通信。我定义了一个ComPort类。我需要先{0xA9,0x55}在“COM5”上写一条消息,要求蓝牙设备开始传输数据。然后我就可以开始读取数据了。我有一个终端应用程序,显示我已经编写了消息,并且数据在“COM5”上可用。

问题定义:

comport.cpp中,既不waitForBytesWritten()也不waitForReadyRead()返回true。可用字节数为零,并且onReadyRead()不调用插槽。我的代码有什么问题?

comport.h

comport.cpp

0 投票
0 回答
389 浏览

c++ - 如何防止 QNetworkAccessManager 缓冲来自 QIODevice 的 POST 内容?

我不确定我需要的功能是否不是 Qt 无法提供的功能,但似乎由于有多个有效的用例,我可能做错了什么并且有人已经处理了这个问题。

我想做的很简单——我想发出一个具有给定内容长度的 POST 请求,并从QIODevice. QNetworkAccessManager有一种方法QNetworkReply * QNetworkAccessManager::post(const QNetworkRequest & request, QIODevice * data)似乎对此很理想。内容长度很大(假设为 8 GB),并且似乎 QtQIODevice::readData在将任何内容发送到网络之前尝试调用以获取所有数据(至少 Wireshark 在设置较小的内容长度时没有显示任何内容,例如 4 ,产生读取 4 个字节并传输所有内容的行为)。这让我相信 Qt 实际上想要缓冲所有的 POST 内容。我已经明确设置了QNetworkRequest::DoNotBufferUploadDataAttribute属性,但这并没有改变这一点。

可能它实际上是这样工作的,我对此无能为力,但在这种情况下,根本不适合内存的大文件上传如何工作?无论如何,在我调试 Qt 是否真的在缓冲整个事情时,欢迎遇到同样问题的人提供任何反馈。

0 投票
2 回答
1145 浏览

qt - QIODevice::读写 | QIODevice::Unbuffered - 不支持的打开模式

http://doc.qt.io/qt-5/qserialport.html#open

警告:模式必须是 QIODevice::ReadOnly、QIODevice::WriteOnly 或 QIODevice::ReadWrite。不支持其他模式。

以下代码不打开串口。

使用无缓冲标志的方法是什么?

0 投票
2 回答
588 浏览

c++ - QAudioOutput - 应用程序规模不断增长

我正在尝试每 20 毫秒写入一次 QAudioOutput 的缓冲区。当我尝试执行此代码时,我可以看到进程的大小每秒增加约 4-8 kB。我试图找到一些函数来清除 QIODevice 或 DAudioOuptut 的内部缓冲区,但没有运气。

我正在使用 Qt 5.2.1

在下面的示例中,仅写入了静音(零),但具有相同的效果:

0 投票
0 回答
942 浏览

c++ - 如何正确使用QSerialPort不断读写数据?

我必须在工作中驾驶激光,为此我需要与 RS232 中的串行端口通信。由于您在使用激光时必须小心,因此您需要不断读取激光状态(温度、功率等...),为此您必须每 1 或 2 秒发送大量命令(~20) .

我使用 Qt 类QserialPort,我的问题是,当我发送所有命令时,我阻塞了 GUI,程序变得不可用。我阅读了很多关于 QSerialPort 以及如何使用它的内容,例如:Blocking Master、Blocking Slave、Async reader、Terminal 等。我仍然无法弄清楚。

首先我想使用线程,但这个人的回答说这是个坏主意。然后,我尝试不使用线程,但得到了相同的结果。

我想要的是一种与激光通信的方式,它不会使整个程序等待发送的答案以及处理相应的答案。我发送我的第一个命令,激光回答,我处理答案,然后我发送第二个命令,等等......所有这些都在后台

我当前的实现是基于线程的,但我还有一个没有线程的实现。

我有用于 GUI的MainWindow类,一个Laser类,它知道如何为激光编写消息以理解并理解激光的答案,以及一个LaserThread类打开与串行端口的连接,写入和读取。

要发送命令,我会:

这意味着我在发送新命令之前等待收到答复。我尝试使用 waitForBytesWritten但无法获得预期结果。我必须连续调用这个函数 20 次。

阅读答案:

现在我的两个问题是:

  1. 或者,我等待发送新命令的时间过长,并且 UI 被冻结
  2. 或者,我不会等待太多,发送 25 条消息,只得到一个回复​​。

在不冻结程序的情况下不断与串行端口通信(异步或同步)的正确方法是什么?

0 投票
2 回答
153 浏览

c++ - 写一个新文本而不丢失以前的值。在 Qt 中

如何在不丢失先前值的情况下编写新文本


每次初始化 okline_Edit 时,stWrite 函数都会在文件中调用一个新值,然后将 .txt 文件中的前一个值丢失。

或者换句话说

在此处输入图像描述

0 投票
1 回答
399 浏览

c++ - QtAV 和缓冲区的清理

我正在 Qt 中编写一个应用程序,它允许来自字节数组的视频流。作为视频输出组件,我使用的是 QtAV ( http://www.qtav.org/ )。在我的例子中,这个组件的输入是一个 QIODevice (QBuffer),其中有一个 QByteArray 和我的数据。我将在流式传输期间将数据放入 QByteArray 中,但我不知道如何删除我尚未读取的数据。我的问题是,一段时间后,QByteArray 的维度非常大,我不知道如何减少分配的内存。

谢谢

安杰洛

0 投票
1 回答
432 浏览

qt - “QIODevice 设备未打开”仅在 Release 中构建时出现

我正在使用 QNetworkAccessManager 传输文件。我的程序在 Debug 中构建时运行没有任何问题。但是内置Release时出现了一个奇怪的问题:QIODevice::read (QFile, "my file path"): device not open

我的代码有什么问题?感谢您的帮助!

0 投票
0 回答
466 浏览

python - Pyqt4 QMovie FFMPEG 解码器

我对pyqt很陌生。所以请原谅我可能有的任何误解。

我无法使用以下方法将视频直接加载到 QMovie: __init__ (self, QString fileName, ...) QMovie 本身在支持(解码)视频格式方面似乎相当挑剔。

这就是为什么我想使用 FFMPEG 解码 VideoFiles,将帧存储到 QIODevice 并将设备提供给 QMovie 使用: __init__ (self, QIODevice device, ...)

此代码使用 FFMPEG 解码视频文件并将前 20 帧作为 JPG 存储到 QIODevice 流中。这个 QIODevice 被馈送到 QMovie。

伟大的!QMovie 全速播放......但是......只有一次......并且QMovie.frameCount()返回只是1帧而不是 20......(之前查询时QMovie.start()

使用 PyQt4、imageio、numpy

为什么是帧数1而不是 20?我究竟做错了什么?

有没有更直接的方法将 FFMPEG 结果数据存储到 QIODevice 中?Prehaps 一次将 videoFile 加载到 QIODevice 中,而不是单独加载每一帧?

提前谢谢了。

0 投票
0 回答
696 浏览

c++ - Qt | 流程 | 将行写入控制台应用程序

我正在使用 QProcess 与控制台应用程序进行通信:我正在写一些单词并读取输出。但我想通过 QProcess 写行。例如,我有下一个控制台应用程序:

所以,我不能通过 QProcess::exec 或 QProcess::start 传递参数,因为它将参数传递给 char* argv[]。我应该在启动 QProcess 后通过它。我试过使用 QProcess::write,但有问题:如果我使用

我会成功的。但如果我使用

我的程序将单独写下所有这个词,它看起来像

控制台应用程序无法将其识别为一个字符串。我尝试过使用不同的方法:在双括号中写行,

使用受保护的方法QIODEvice::setOpenMode并设置QIODevice::Text标志,使用QDataStream,使用特殊符号,如,,\r以及不同的组合。另外,我尝试使用多个\n\tQProcess::write

我知道,QProcess 继承了 QIODevice 并且有机会像文件一样处理它(输入和输出)。但是单词是否会在文件中单独写入文件并不重要。就我而言,这确实很重要。

谁能帮我?