有没有办法使用Qt发送信号或任何其他方式来判断USB串口线是否已拔下?
答案 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
不断返回不存在但已打开的端口时,情况也是这样,因为您通过打开端口将端口保留在列表中。