问题标签 [qt5.8]
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.
c++ - 为什么我的 Qt 信号没有被事件队列处理?
快速描述情况
我试图让一个最小的 GUI 启动一个无休止的进程,该进程通过 CAN 总线通过自定义协议进行通信。
根据我在这里阅读的内容,我的代码结构如下:
一方面,我有一个类使用 2 个简单的按钮“开始”和“停止”来处理我的 GUI,即 MainWindow。
另一方面,一个使用上面链接中描述的状态机管理我的自定义协议的类,即 Worker。
在这些中间,我有一个将整体连接在一起的控制器。这个控制器在这里是因为处理了一些其他任务,但这不是本文的目的。
关于信号和插槽
我已将按钮信号 (released()) 连接到来自控制器的信号。所以 GUI 不知道到底是什么开始了。
这些控制器的信号连接到来自 Worker 的插槽。这些插槽用于启动和停止该过程。
关于线程
Worker 实例存在于它自己的 QThread 中。可能涉及其他任务,所以我认为最好在自己的线程中处理每个任务。
一开始,worker 的进程是通过信号/槽来处理的,这些信号/槽使状态机在关于转换的状态之间进化。由于信号/槽机制,如果我是正确的,线程的事件循环可以处理其队列中的事件。
问题
我的启动信号已正确发送给工作人员,启动进程并因此启动状态机。这台机器是循环的,直到用户请求停止信号。但是,当用户单击“停止”按钮时,关联的插槽不会被调用。同时,机器继续无休止地运行并且看不到停止请求(我已经放了一些调试消息来查看真正执行了什么)。
代码片段
这是代码片段。主窗口.h
主窗口.cpp
控制器.h
Controller.cpp(继承公共 QObject)
Worker 处理带有枚举State
的状态机。Transition
工人.h
Worker.cpp(继承公共 QObject)
。轮廓
免责声明代码没有正确退出。最好在您的 IDE 中启动它,这样您就可以轻松杀死它。
这些代码片段是使用 Qt5.8.0 MinGW 32 位构建的。要重现问题,只需点击“开始”,调试消息就会出现在控制台中。然后点击“停止”,消息不断出现,不要停止。
我通过直接调用而不是使用信号找到了一种解决stopProcess()
方法Controller
。这样做会正确设置stopRequested
并停止该过程。
不过,我想知道为什么事件队列从不处理来自Controller
? 即使使用信号/槽处理状态机,也允许事件队列在事件到达时对其进行处理。
(我尝试在向 发送信号的中间槽中放置一个中间槽,Controller
以Worker
查看 GUI 是否正确发送了信号并且该槽确实已执行。但该stopProcess()
槽仍未被调用。)
有什么想法吗 ?
c++ - 使用 Qt qSort() 在数组上调用 qSort
我有一个动态数组。
int* array = new int[size]
我正在使用 Qt 库在 C++11 中开发应用程序。
我可以这样使用qSort
它吗QtAlgorithms.h
:
qSort(array, array+size-1)
我不确定,因为这些论点需要一种RandomAccessIterator
这是否意味着任何指针?
qt - ChildrenRect 总是返回 0
我有一个 Flickable 项目,我想在其中放置一个自定义的流组件,所以我创建了这样的 Flickable:
然后在我的 main.qml 中有这个(上面的文件是 MyFlickable,而 MyFlow 是具有特定属性的流):
这很好用,但问题是我希望能够以尽可能少的开销重用这个项目。在我的 MyFlow 中设置 id 不起作用,我尝试了这个
正如这里在 contentWidth 部分中所建议的那样:http: //doc.qt.io/qt-5/qml-qtquick-flickable.html#contentItem-prop
但这总是返回 0。我尝试了其他几种方法来接收 onCompleted 信号,但我得到了同样的运气。这不起作用,例如:
在我看来,这应该与通过 id 访问项目相同,但显然不是。
所以我的问题是:在添加了所有组件之后,我如何达到我的流程高度?
提前致谢!
c++ - VBO 与 OpenGL 4.1 和 3.0 的兼容性
我有一个显示一些 3D 渲染的应用程序。在将我的应用程序集成到不同用户的笔记本电脑上时,我遇到了 VBO 的一些图形问题。顶点缓冲区对象在开发站中工作得非常好
第一台笔记本电脑嵌入了 AMD Radeon HD 6470M -> OpenGL 4.1
在这台笔记本电脑上,我有一些:老式方式 opengl 代码,工作正常。vbo 实现:不显示 VBO 的数据
这里是负责绘制我的 VBO 的代码:
我是否使用了任何最近的功能?我真的没有这种感觉。
非 VBO 对象完美显示:
第二台笔记本电脑嵌入了 Intel Graphic 3000 -> OpenGL 3.0
在这里,如果我只将鼠标放在 OpenGL 画布上,它就会崩溃。什么都不会显示......甚至背景清除颜色。
我注意不要使用已弃用的功能,我真的认为一切都可以与一大堆计算机/笔记本电脑兼容。有人有什么主意吗 ?
使用 Qt5.8,一切都显示在 QGLWidget 中。问题发生在 64 位平台上,在 Windows 7 Professional 上测试。
c++ - LNK1181:无法打开输入文件 'release\main.obj' - 重建 QT 应用程序时
我是 QT 应用程序的新手。我从我的供应商那里得到了一些基于 QT 的项目。示例应用程序基于 QT 5.8.0 msvc2013 32 位/64 位构建,但我没有 msvc 2013,而是在我的电脑上安装了 msvc 2017。重建(在 Qmake 之后)收到的代码时,我遇到了以下问题。
任何人都可以帮助我摆脱这个问题也期待得到您关于配置 Qtcreator 项目和构建设置的建议。
错误:LNK1181:无法打开输入文件“release\main.obj”。套件 Desktop Qt 5.8.0 MSVC2017 64bit 存在配置问题,这可能是此问题的根本原因。执行步骤“Make”时
Project.Pro 文件代码,
以下是我的套件设置,
qt - Qt 5.8 使用 std::chrono 编译问题
我正在 Ubuntu 17.04 上开发 Qt 应用程序。我以前使用的是最新的 Qt 版本(Qt 5.12.2),但我不得不将几个版本返回到 Qt 5.8。
我能够使用 Qt 5.12 毫无问题地进行编译,但是使用 Qt 5.8 我得到以下所有与 std::chrono 相关的错误:
有关如何解决此问题的任何想法。
这是 g++ 版本还是 libstdc++ 版本问题?
这是我的 g++ 版本:
如果是这样,如果有任何关于清除/删除和 apt-get install 的建议会有所帮助。
qt5.8 - VS2015社区版Qt 5.8项目构建失败
我在 Visual Studio 2015 社区版中构建 Qt 5.8 项目时遇到此错误,我无法解决此问题。
qt5.8 - Qt in VS 2015 comm edn
您好我在 Visual Studio 2015 comm 中构建 Qt 应用程序 Test2 时遇到以下错误。编辑
请帮我解决这个问题。