有没有办法使用 Qt 发送信号或任何其他方式来判断 USB 串行电缆是否已拔出?
问问题
3460 次
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 回答