串口在Qt中连接或断开时如何发出信号?

时间:2017-01-16 08:02:18

标签: qt serial-port

我使用QSerialPort与串口通信。但是如何在更改(连接或断开连接)时发出信号?

操作系统是win7。感谢。

1 个答案:

答案 0 :(得分:0)

我想我有一个解决您的问题的方法(至少解决了我的问题)。

我有一个ComPort类,可以处理我的GUI的所有串行功能。当用户选择一个COM端口时,将启动QTimer,它会定期检查状态。计时器结束后,发出信号timeout(),为此我编写了一个自定义插槽:

// Custom slot to be called when timer times out.
void ComPort::checkComPortStatus()
{
    QSerialPortInfo *info = new QSerialPortInfo;
    QList<QSerialPortInfo> list = info->availablePorts();
    bool port_still_available = false;

    for (QSerialPortInfo &port : list) {
        if (port.portName() == serial_port->portName())
            port_still_available = true;
    }

    if (!port_still_available) {
        qDebug() << "Selected COM-port," << serial_port->portName() << ", no longer available!";

        delete serial_port;
        serial_port = nullptr;
        qDebug() << "COM-port is deleted.";

        delete timer;
        timer = new QTimer(this);
        qDebug() << "COM-port timer is deleted.";

        selectedPort_label->setText("Error: disconnected");
    }
}

这当然仅在端口仍然关闭时才有用。打开端口后,QT会发出标准信号(请查阅文档):

errorOccurred(QSerialPort::SerialPortError error)

我希望这会有所帮助!