问题标签 [qt5.10]

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 投票
1 回答
733 浏览

c++ - QTcpSocket data transfer stops when read buffer is full and does not resumes when it frees up

I have server-client Qt application, where client sends data packets to server and server reads them at a set time intervals. It happens that client sends data faster than server can read thus filling all the memory on the server side. I am using QAbstractSocket::setReadBufferSize(size) to set max read buffer size on the server side and when it fills up, socket data transferring stops, and data is buffered on client side, which is what i want, but the problem is when server's QTcpSocket's internal read buffer frees up (is not full anymore), data transfer between client and server does not resume.

I've tried to use QAbstractSocket::resume() which seems to work, but Qt5.10 documentation says:

Continues data transfer on the socket. This method should only be used after the socket has been set to pause upon notifications and a notification has been received. The only notification currently supported is QSslSocket::sslErrors(). Calling this method if the socket is not paused results in undefined behavior.

I feel like I should not use that function in this situation, but is there any other solution? How do i know if socket is paused? Why data transfer does not continue automaticaly when QTcpSocket's internal read buffer is not full anymore?

EDIT 1 :

I have downloaded Qt(5.10.0) sources and pdb's to debug this situation and I can see that QAbstractSocket::readData() internal function have line "d->socketEngine->setReadNotificationEnabled(true)" which re-enables data transfering, but QAbstractSocket::readData() gets called only when QTcpSocket internal read buffer is empty (qiodevice.cpp; QIODevicePrivate::read(); line 1176) and in My situation it is never empty, because I read it only when it has enough data for complete packet.

Shouldn't QAbstractSocket::readData() be called when read buffer is not full anymore and not when it's completely empty? Or maybe i do something wrong?

0 投票
1 回答
419 浏览

qt - Qt流控制传输协议(sctp)

我正在尝试运行依赖于 QSctpServer 和 QSctpSocket 的 qt 示例 multistreamserver 和 multistreamclient。

我收到错误“QSctpSosket 没有命名类型”和“无效使用不完整类型'class QSctpServer'”

到底是怎么回事?

运行 Ubuntu 16.04、Qt 5.10.1

0 投票
1 回答
209 浏览

c++ - 将 Pixeldata 渲染到 OpenGL 纹理四边形

经过几天的尝试,我无法正确地将 Pixeldata 渲染为带纹理的四边形。

我想要的相当简单(我认为):我目前正在为我的公司编写一个 VNC 实现,以将其绑定到现有应用程序中。我已经成功实现了 RfbProtocol(至少在我需要的情况下)并且我能够获得正确的 Pixeldata。因为 VNC 服务器只发送增量更改,所以我收到带有更改区域和像素信息的小矩形。

我已经计算出 Pixeldata 的相应 OpenGL 格式是GL_BGRAGL_UNSIGNED_INT_8_8_8_8_REV

因为我无法使用 Textured Quads(这似乎是为此目的的最佳实现),所以我使用了不同的方法:

这一切都在 QOpenGLWidget 中完成。

显然这不是最好的方法,但它正在用于测试。问题是我需要将 Pixeldata 缩放到 Widget 的大小,这可以与 OpenGLTexture 很好地配合使用,但正如我在开头提到的那样,我根本无法正确地做到这一点。

0 投票
1 回答
495 浏览

c++ - 在构建机器人上构建后,Qt 应用程序变成了 Windows 旧样式

我开始从 Qt 5.6 迁移到 5.10.1 并遇到了这个问题。在 5.6 版本中,样式为“windowsvista”,一切正常。现在看起来 Qt 无法检测到这个并使用“windows”样式。

此外,在我的 PC 上,5.10.1 的构建看起来不错。它适用于 Windows 10 x64,与 buildbot 相同。

配置线:

我在没有 Ruby 和 Perl 库的情况下构建 Qt,因为我的项目不需要它。

可能是配置的问题,因为在 5.6 中有 configureapp.exe 在 /qtbase 现在我看不到它。但我不明白原因。

0 投票
2 回答
1496 浏览

c++ - 从 Qt 中的 Web 服务解析未命名的 JSON 数组

我正在尝试从 Web 服务解析这个 JSON。

当我将 API 调用的响应作为 QString 注销时,如下所示,结果很好,但所有引号都已转义,因此不会使其成为有效的 JSON:

到目前为止我看到的示例(例如Parse jsonarray?)仅解析它们从名称中获取的命名数组QJsonObject。关于如何QJsonArray直接使用或与QJsonDocument::fromJson()返回数据一起使用的任何提示?

0 投票
2 回答
289 浏览

qt - 在 Qt 中从 QJsonArray 构造 QString

在尝试QString从 a 的值构造 a 时QJsonArray,我收到以下错误:

error: passing 'const QString' as 'this' argument discards qualifiers [-fpermissive].

不知道我在这段代码中哪里弄错了:

0 投票
1 回答
538 浏览

qt - Qml - qml 中的 C++ 信号参数“未定义”

我收到来自工作线程的信号并通过 C++ Singleton (CTaskManager) 将其重新发送到 qml。

这适用于 LINUX 下的 Qt Creator 4.6.1。当我在 Windows 下运行相同的项目时,我的 qml 信号连接中只得到未定义的参数。

有任何想法吗 ?

0 投票
2 回答
2378 浏览

c++ - 代码编辑器实现缺少 Qt 的 QFontMetrics::horizo​​ntalAdvance()

我正在为一种简单的脚本语言实现代码编辑器,并且一直在使用 Qt 代码编辑器示例(http://doc.qt.io/qt-5/qtwidgets-widgets-codeeditor-example.html)作为使用行号实现 QPlainTextEdit。该示例使用基本小部件的 fontMetrics() 方法“horizo​​ntalAdvance”来查询单个字符的宽度(或更好的前进)。

该方法QFontMetrics::horizontalAdvance(QChar)(参见http://doc.qt.io/qt-5/qfontmetrics.html#horizo​​ntalAdvance -1 )可以在 Qt 文档中找到,但我的实现似乎缺少这种方法

我在带有 Visual Studio Enterprise 2017 版本 15.7.3 的 Windows 10 上使用 Qt 5.10.1 'msvc2017_64'。我已经在标题中搜索了缺少的方法,但只找到QTextLine::horizontalAdvance()了我不需要的方法。

我已将QFontMetrics::horizontalAdvance(QChar)调用替换为QFontMetrics::width(QChar)使用当前字体(Consolas)的调用,但我不确定它是否适用于每种可能的字体。

问题 1) QFontMetrics::horizo​​ntalAdvance() 是否已从当前版本的 Qt 中删除,我的安装是否存在错误或遗漏了什么?

问题 2)获得特定(非比例)字体预付款的正确方法是什么?

感谢您阅读本文并提供帮助!

0 投票
1 回答
69 浏览

qt - QWidget 多种样式无法正常工作

当我尝试在一个小部件上设置多个样式时,只应用第一个样式。

我想删除当我将鼠标悬停在 QToolButton 上时出现的边框以及菜单中的向下箭头。

基本上,该按钮包含一个设置动画速度的菜单,例如视频播放器。

这是我的代码:

这是边框和向下箭头:

我的 QToolButton

无论我将该代码片段放在我的代码中,还是直接在 Qt 设计器上设置样式,在这两种情况下它仍然只应用第一个样式。

如何将两种样式应用于同一个对象?

0 投票
4 回答
7841 浏览

chromium - 我可以使用 ffmpeg 构建 chromium 以支持所有视频格式吗?

在Qt5.2版本下,我使用了QtWebView,它可以自动调用第三方扩展来支持avi、mpeg、mov、flv等视频格式。但是当我升级到Qt5.10,将QtWebView改成QtWebengineView后,效果不同了,无法调用第三方扩展。如果我想用 ffmpeg 修改 chromium 源以支持 QtWebengine 的所有视频格式,我该怎么办?