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

3

我使用 QSerialPort 来与串口通信。但是当串口连接或断开时,如何发射一个信号?

操作系统是Windows 7。谢谢。


你说的连接或断开指的是什么?你可以打开或关闭串口,但这并不意味着它已连接。或者你正在使用USB-RS232? - JMA
是的,USB-RS232。'已连接'意味着手动插入USB,但不在源代码中打开串口。 - zhangailin
请查看此处:http://stackoverflow.com/questions/20773576/usb-device-detection-windows-linux-ft232r 也许您需要为每个USB-232型号添加一个条目。另一种方法是使用QSerialPortInfo定期检查可用端口。 - JMA
1个回答

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)

希望这能有所帮助!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接