问题标签 [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 投票
3 回答
1089 浏览

c++ - 如何报告在 QuaGzipFile(QuaZIP 库)上读取数据的进度

我在 Ubuntu 12.04 x86_64 上使用 QuaZIP 0.5.1 和 Qt 5.1.1 for C++。

我的程序读取一个大的 gzip 压缩二进制文件,通常是 1GB 或更多的未压缩数据,并对其进行一些计算。它不是计算广泛的,并且大部分时间都在 I/O 上传递。因此,如果我能找到一种方法来报告读取了多少文件数据,我可以在进度条上报告它,甚至提供对 ETA 的估计。

我打开文件:

但是 QuaGzipFile 中没有查找文件大小或当前位置的功能。

我不需要找到未压缩流的大小和位置,压缩流的大小和位置很好,因为粗略估计进度就足够了。

目前,我可以找到压缩文件的大小,使用QFile(fileName).size(). 另外,我可以很容易地找到未压缩流中的当前位置,方法是保持gzip.read(). 但这两个数字不匹配。

如果有帮助,我可以更改 QuaZIP 库,并访问与 zlib 相关的内部内容。

0 投票
1 回答
1603 浏览

qt - 从 C++ 向 QML Video Player 输入视频数据

我正在寻找在 QML 中实现视频播放器应用程序的最佳方法。几乎所有 QML 示例都是从文件系统或 Web 读取文件:

我想为MediaPlayer- 一个 C++QObject派生类指定我自己的源,它的接口类似于QIODevice. 这对我的需求来说是完美的。我需要部分预加载视频并缓存以供以后使用。

有满足我需求的简单解决方案吗?(我使用的是 Qt 5.2)

0 投票
2 回答
2952 浏览

c++ - 在 Mac OS (10.9) 上使用加密的自定义 QIODevice 流式传输 QMediaplayer

我目前正在将应用程序从 Qt4(.8.4) 移植到 Qt5(.2.0)。我几乎完成了所有已知的更改,例如不推荐使用的 toAscii() 函数、缺少 QtGui 等等。现在我们有了一个使用 phonon 框架的音乐播放器,它不再受支持,并被 QtMultimedia 模块取代,包括 QMediaPlayer 和一堆音频处理类。

我们的播放器实现采用自定义 QIODevice。该设备为磁盘上的加密音频文件提供了一个接口。现在播放器向设备请求 x 字节,设备从加密文件中读取,解密播放器请求的字节并返回它们。

现在我在多媒体模块中搜索了一个函数来重用我的 IODevice 并找到了以下函数:

并按如下方式使用它:

其中 m_pDecryptingMediaDevice 是 QIODevice 子类,m_pPlayer 是 QMediaPlayer。

现在在 Windows 上,一切都按预期工作。QMediaplayer 将其 MediaStatus 更改为 QMediaPlayer::LoadingMedia 并向我的设备询问字节。然后更改为 QMediaPlayer::State PlayingState 并将状态设置为 BufferedMedia。一切安好。Mac OS(10.9.1)上的不幸我只得到 QMediaPlayer::PlayingState ,仅此而已。播放器/音频后端从不向我的设备询问字节,也不调用任何其他函数。我认为错误与自定义 QIODevice 无关,而是与将其提供给 QMediaPlayer 的方式有关,因为播放器甚至不要求任何字节或调用设备上的任何函数。

我只是想把它分解成一个小测试项目:

奇怪的是,这根本不播放 - 不在 Windows 上,不在 Mac OS 上。总是有效的就是给玩家一个 URL,比如

根据使用函数 setMedia(const QMediaContent & media, QIODevice * stream = 0) 从 QIODevice 流式传输到 QMediaPlayer,有人在类似情况下有任何经验吗?我被这个困住了。

最好的问候,并提前非常感谢。

0 投票
3 回答
6998 浏览

qt - 使用 QSerialPort 从串行端口读取时出现问题

我必须为基于 FriendlyARM 的嵌入式处理器系统开发 C++ 程序。我在台式计算机上使用 Qt Creator 3.0.0(基于 Qt 5.2.0)。我的程序应该能够从 Mini2440 FriendlyARM 处理器的串口读取。

在进入目标系统(嵌入式系统)之前,我尝试读写笔记本电脑上的串行端口。我的主要问题是如何从串口读取。如您所知,新电脑和笔记本电脑没有串口,所以我尝试使用手工制作的 USB 转串口适配器电缆模拟串口编程。插入 USB 串行电缆后,在 Ubuntu 上识别为“/dev/ttyUSB0”。它似乎运作良好。请注意,电缆的另一端(串行端口)没有连接任何东西。

我的第一个问题是:这样配置电缆是否可以,或者我必须将其连接到其他设备?我尝试每 10 秒写入 /dev/ttyUSB0 并读取数据。我结束了以下代码:

写入串口是可以的。但有时阅读问题“没有这样的文件或目录”!有时“文件暂时不可用!奇怪的是notifAreaPort.error()返回0,表示没有发生错误!

想法?

——赛义德·阿姆罗拉希·博尤基

0 投票
1 回答
1169 浏览

qt - 管道日志输出到 QTextEdit 小部件

stackoverflow 中有一些“类似”的问题,但不能完全实现。在 pyqt 中,我试图将日志文件(实时更新)的输出通过管道传输到 QTextEdit 小部件中。我到目前为止的代码是:

它处理当前内容,但不处理任何后续更改。理想情况下,Qt 信号会提醒我在可用时读取另一行并将其直接写入 TextEdit。

0 投票
1 回答
1073 浏览

c++ - QIODevice::readAll() 无法正常工作?

我目前正在从事一个涉及 Arduino 和笔记本电脑之间串行通信的项目。我知道 Arduino 确实在发送我需要的数据,请看这张图片:http ://s1.postimg.org/w5wisaetr/Help.png

现在在另一端,我的笔记本电脑连接到 Arduino 并运行我使用 QT Creator 制作的程序。但是,当从串行端口读取数据时,我无法让程序显示此信息。

我连接了 readData() 函数,以便在接收到这样的数据时执行:

这有效,并且每当从 Arduino 传输某些内容时都会调用 newData() 函数。但是函数 newData() 不显示我需要的数据。

新数据():

这只会向显示器发送空消息。像这样:http ://s2.postimg.org/dkcyip2u1/empty.png

但是,以下代码有效:

此代码按应有的方式显示消息。然而,输出显示的另一个区别是,当执行工作代码时,我的控制台也会显示很多帧错误,我认为这是因为不需要的字符的波特率与我需要的数据不同。

这就是我开始质疑 readAll() 函数的原因。同样明显的是,Arduino 不仅发送了我需要的数据,还发送了一些不需要的字符(参见第一个链接中的图像),但我不认为这是一个问题,因为我稍后会过滤掉它。

非常感谢所有帮助。

更新:我发现 readAll() 函数返回的 QByteArrays 的 size() 等于 0。

0 投票
2 回答
1911 浏览

c++ - 如果打开设备,QSerialPort 会导致程序停止(无限循环?)

我想在串行设备上写。不幸的是,我感觉 QSerialPort 在 linux 下没有正确实现。与其他方法(python)相比,我得到!有时!当我尝试调用时,程序挂起:

我正在使用来自http://qt-project.org/wiki/QtSerialPort的示例(见下文)。QSerialPortInfo 工作正常,因此我可以在打开设备之前搜索它。该问题出现在所有 Qt 5.* 系列中。我目前正在使用 OpenSuse 存储库中的 5.3 beta。其他工具或方法证明设备正在运行(Windows 或 Python)。

工作python脚本:

编辑:我用调试器测试过。至少在 linux 上似乎是 Qt 5 的问题。它看起来像与设备锁相连。

0 投票
1 回答
2296 浏览

qt - Qt QTcpSocket 流式传输

我的应用程序通过QTcpSocket.

客户:

服务器:

问题是没有任何反应,但调试控制台告诉我:

...但是该QDataStream对象不允许我设置打开模式!:( 怎么了?

0 投票
1 回答
134 浏览

c++ - 如何摆脱 QIoDevice 中的 memcpy

我正在使用 Qt 进行一些音频输出。有一个示例音频输出,其中纯虚函数 qint64 QIODevice::readData ( char * data, qint64 maxSize ) 像这样重新实现(这不是示例中的实际代码)。

因此,我们获取指向数据的指针,将内存从缓冲区复制到该数据。我想知道是否可以将指针数据分配给新位置,如下所示:

因为,memcpy 很慢而且 C。我可以吗?谢谢!

好的,只是不要收到“什么是慢”的评论:首先 - memcpy 比指针分配慢第二 - 是的,我在播放声音时有延迟,我想让程序在每一点都处于最佳状态。

PS我正在尝试这样做,但我没有声音,所以也许答案是否定的。那么为什么?

0 投票
2 回答
865 浏览

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

我正在使用 qt 5.3。

我有一件大事写入 QIODevice 以供阅读。我希望有一个代理来获取数据,同时保持 QIODevice 中的数据可供其他东西读取。因此,如果我调用 readAll() 我将在代理中获得一切良好但其他阅读器无法获得任何数据。

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

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

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

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