C++ 用Qt打开串口
我在Qt中打开串行端口时遇到问题。尝试打开端口失败后,我收到的错误消息是C++ 用Qt打开串口,c++,windows,qt,serial-port,C++,Windows,Qt,Serial Port,我在Qt中打开串行端口时遇到问题。尝试打开端口失败后,我收到的错误消息是不支持操作错误。我想指出两点: 我试图打开的端口是在使用USB(CDC)的ARM MCU中实现的 我可以在其他应用程序(如teraterm或realterm)中打开端口 我能够在Qt应用程序中每过一分钟就打开一个端口。我在ARM设备中添加了一些代码(根本不涉及USB功能),我无法再在Qt中打开端口 我测试了我可以在其他程序(即realterm)中打开的端口上发送/接收数据 该端口适用于其他应用程序,但不适用于Qt(尝试了Q
不支持操作错误
。我想指出两点:
- 我试图打开的端口是在使用USB(CDC)的ARM MCU中实现的
- 我可以在其他应用程序(如teraterm或realterm)中打开端口
- 我能够在Qt应用程序中每过一分钟就打开一个端口。我在ARM设备中添加了一些代码(根本不涉及USB功能),我无法再在Qt中打开端口
- 我测试了我可以在其他程序(即realterm)中打开的端口上发送/接收数据
- 该端口适用于其他应用程序,但不适用于Qt(尝试了Qt creator提供的终端示例,但也无法打开该端口)
void MainWindow::openSerialPort()
{
SettingsDialog::Settings p = settings->settings();
serial->setPortName(p.name);
serial->setBaudRate(p.baudRate);
serial->setDataBits(p.dataBits);
serial->setParity(p.parity);
serial->setStopBits(p.stopBits);
serial->setFlowControl(p.flowControl);
if (serial->open(QIODevice::ReadWrite)) {
console->setEnabled(true);
console->setLocalEchoEnabled(p.localEchoEnabled);
ui->actionConnect->setEnabled(false);
ui->actionDisconnect->setEnabled(true);
ui->actionConfigure->setEnabled(false);
showStatusMessage(tr("Connected to %1 : %2, %3, %4, %5, %6")
.arg(p.name).arg(p.stringBaudRate).arg(p.stringDataBits)
.arg(p.stringParity).arg(p.stringStopBits).arg(p.stringFlowControl));
} else {
qDebug() << "Failed to open serial port " << serial->portName() << "Error: " << serial->error();
QMessageBox::critical(this, tr("Error"), serial->errorString());
showStatusMessage(tr("Open error"));
}
}
void主窗口::openSerialPort()
{
设置对话框::设置p=设置->设置();
串行->设置端口名(p.name);
串行->设定波特率(p.baudRate);
串行->设置数据位(p.dataBits);
串行->设置奇偶校验(p.奇偶校验);
串行->设置停止位(p.停止位);
串行->设置流量控制(p.流量控制);
如果(串行->打开(QIODevice::读写)){
控制台->设置启用(真);
控制台->设置LocalEchonabled(p.LocalEchonabled);
ui->actionConnect->setEnabled(假);
ui->actionDisconnect->setEnabled(真);
ui->actionConfigure->setEnabled(假);
showStatusMessage(tr(“连接到%1:%2、%3、%4、%5、%6”)
.arg(p.name).arg(p.stringBaudRate).arg(p.stringDataBits)
.arg(p.stringParity).arg(p.stringStopBits).arg(p.stringFlowControl));
}否则{
qDebug()您在Qt中面临一个bug或过度排斥行为。您不太可能在自己的代码中修复它
如果没有Qt的调试版本,也不可能进行调试。使用调试版本,您可以确定QSerialPort
实现中失败的确切位置。然后,您将知道发生了什么,并能够在此基础上提交Qt错误报告。因为您将被设置为构建Qt,您可以自己修复错误并快速开始帽子道。在不知道更改和代码的情况下,很难在这里进行故障排除。您是否创建了一个最小的Qt示例进行测试?终端Qt创建者提供的示例非常少。这也是关于我在ARM中的代码,而不是Qt。重点是我可以用其他程序打开端口,但不是Qt。我已经查看了qserialport.cpp文件以查找UnsupportedOperationError
string。问题是我找不到任何匹配的错误代码。我的错误字符串是QSerial端口::SerialPortError(UnsupportedOperationError)
。终端Qt creator的示例显示了相同的错误?请提供程序的最低版本以实现可跟踪性是的,终端示例给出了完全相同的错误。我将添加mwe。我尝试重新创建您的问题,并使用了我编写的以下示例代码:请参阅sserial.h,但我尝试的所有操作都按预期进行,我无法获得此错误为“UnsupportedOperationError”。如果没有“我在ARM设备中添加了一些代码”的详细信息,则很难确定问题。请运行此最低限度的程序,并让我知道这是否有效。