拔下USB串行电缆时发送信号

时间:2013-09-27 20:21:29

标签: c++ qt qtcore qt-signals qtserialport

有没有办法使用Qt发送信号或任何其他方式来判断USB串口线是否已拔下?

3 个答案:

答案 0 :(得分:6)

您可以在QtSerialPort插件中使用QSerialPort类的error信号。请参阅我们的文档中的详细信息。

http://qt-project.org/doc/qt-5.1/qtserialport/qserialport.html#error-prop

你需要写这个:

connect(mySerialPort, SIGNAL(error(QSerialPort::SerialPortError)), this,
        SLOT(handleError(QSerialPort::SerialPortError)));

...

void MyClass::handleError(QSerialPort::SerialPortError error)
{
    if (error == QSerialPort::ResourceError) {
        QMessageBox::critical(this, tr("Critical Error"), serial->errorString());
        closeSerialPort();
    }
}

QtSerialPort可以使用Qt 5.1轻松安装<因为包是分发的。但是,我们确保QtSerialPort适用于以前的版本,包括Qt 4.8.X.在这里,您可以找到Qt 4的说明,以便为您安装:

  • git clone git@gitorious.org:qt/qtserialport.git

  • cd qtserialport

  • 的qmake

  • sudo make install。

然后,如果您碰巧使用qmake,则需要在qmake项目文件中包含以下行:

Qt 5: QT += serialport
Qt 4: COMFIG += serialport

答案 1 :(得分:2)

使用QSerialPortInfo将获得结果:

bool MyClass::checkPort()
{
    QSerialPortInfo *portInfo = new QSerialPortInfo(ui->serialDevice->currentText());
    // ui->serialDevice being a combobox of available serial ports

    if (portInfo->isValid())
    {
        return true;
    }
    else
    {
        return false;
    }
}

答案 2 :(得分:1)

Activity现已过时。可以使用isValid(),因为当您打开端口时它将返回isBusy(),而当端口不再存在时,它将返回true(并且您仍然打开它)。当false不断返回不存在但已打开的端口时,情况也是这样,因为您通过打开端口将端口保留在列表中。