qt在被另一个程序打开后从串行端口读取数据

qt在被另一个程序打开后从串行端口读取数据,qt,Qt,我正在使用windows 8.1中的Qt版本5.5.1。 当我跑步时, 程序成功连接到端口,但未接收任何数据 但当我关闭这个程序并打开Hercules_3-2-6应用程序(rs232终端软件)时,该应用程序读取数据, 关闭Hercules_3-2-6应用程序并再次打开终端示例后,该程序工作并读取数据,直到重新启动计算机 我多次重复这个过程 但在Hercules_3-2-6应用程序打开一次端口之前,终端项目在重启系统后不会收到任何数据 港口规格: 姓名:COM3,, 波特率:9600, 数据位:8

我正在使用windows 8.1中的Qt版本5.5.1。 当我跑步时, 程序成功连接到端口,但未接收任何数据

但当我关闭这个程序并打开Hercules_3-2-6应用程序(rs232终端软件)时,该应用程序读取数据, 关闭Hercules_3-2-6应用程序并再次打开终端示例后,该程序工作并读取数据,直到重新启动计算机

我多次重复这个过程

但在Hercules_3-2-6应用程序打开一次端口之前,终端项目在重启系统后不会收到任何数据

港口规格: 姓名:COM3,, 波特率:9600, 数据位:8, 平价:无, 停止位:1, 流量控制:无

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 {
        QMessageBox::critical(this, tr("Error"), serial->errorString());

        showStatusMessage(tr("Open error"));
    }
}



void MainWindow::readData()
{
QByteArray data = serial->readAll();
console->putData(data);
}

只需在打开串行端口后配置它即可。如果在这些说明之后打开端口:

serial->setBaudRate(p.baudRate);
serial->setDataBits(p.dataBits);
serial->setParity(p.parity);
serial->setStopBits(p.stopBits);
serial->setFlowControl(p.flowControl);
他们被忽视了。您的第二个程序为您正确配置串行端口,并且在启动程序时仍保留该配置。 试试这个:

void MainWindow::openSerialPort()
{
    SettingsDialog::Settings p = settings->settings();
    serial->setPortName(p.name);
    if (serial->open(QIODevice::ReadWrite)) {
        serial->setBaudRate(p.baudRate);
        serial->setDataBits(p.dataBits);
        serial->setParity(p.parity);
        serial->setStopBits(p.stopBits);
        serial->setFlowControl(p.flowControl);
        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 {
        QMessageBox::critical(this, tr("Error"), serial->errorString());

        showStatusMessage(tr("Open error"));
    }
}



void MainWindow::readData()
{
QByteArray data = serial->readAll();
console->putData(data);
}

配置串口时必须注意,任何选项都可能返回true或false;最佳做法是检查和管理每一个可能返回的错误。

能否显示连接设置的代码?这将有助于指出问题所在。我使用qtserialport终端示例。