5

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

4

3 回答 3

8

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

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

  • 制作

  • 须藤使安装。

然后,如果您碰巧使用 qmake,您将需要在 qmake 项目文件中添加以下行:

Qt 5: QT += serialport
Qt 4: COMFIG += serialport
于 2013-09-27T20:30:35.927 回答
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;
    }
}
于 2013-09-30T16:44:34.607 回答
1

isValid()现在已经过时了。isBusy()可以改为使用它,因为它会true在您打开端口并且false端口不再存在时返回(并且您仍然打开它)。当availablePorts()不断返回不存在但打开的端口时也是如此,因为您通过打开它来将端口保留在列表中。

于 2016-02-01T14:40:38.647 回答