【发布时间】:2020-11-30 21:14:39
【问题描述】:
我正在为 Raspberry Pi 驱动的机器人开发基于 Qt-C++ 的前端应用程序。我正在使用 Qt 5.9 版以及 QSerialPort 和 Pigpio 库。在我的应用程序中,当我向机器人发出命令序列的运行命令时,我的 Raspberry Pi 开始与微控制器进行串行通信,在该微控制器中它发送一些消息,然后等待接收响应。这种发送和等待会导致 Mainwindow 线程冻结。我正在尝试构建一个紧急停止功能,这将在运行过程中停止命令执行。
为了实现这一目标,我尝试将我的串行通信部分推送到一个单独的线程 (QThread)。它没有成功。现在我正在尝试将紧急停止部分构建到一个 QDialog 框中,当我发出运行命令时会打开该对话框,其中包含一个紧急停止 QPushbutton。对话框正在以非模态形式运行。但是在我当前的代码中,当我给出运行命令时,会打开一个对话框,但是对话框是完全空白的,然后在运行命令结束时关闭(这是故意的)。我会分享一些外观截图。
你能建议我可能出错的地方吗?或者有没有更好的方法来解决这个问题?欢迎任何批评和建议!
谢谢!
【问题讨论】:
-
您的程序等待响应可能是问题所在。您可以对收到的消息(
readyRead信号)做出反应,而不是等待响应。没有看到任何代码很难说。 -
@thuga 我最初也是这么想的。我不能使用它的原因是因为我想运行 1 个命令,等待下级控制器的 OK 响应,然后执行下一个命令。我的紧急停止需要在等待期间工作。我需要暂停执行下一个命令。在这种情况下您有什么建议吗?
标签: c++ qt raspberry-pi4 qtserialport