Есть ли способ отправить сигнал или любой другой способ узнать, отключен ли последовательный USB-кабель, используя Qt?
Вы могли бы использовать error
сигнал класса QSerialPort в дополнении QtSerialPort. Подробности смотрите в нашей документации.
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 [email protected]: qt / qtserialport.git
cd qtserialport
QMAKE
делать
sudo сделать установку.
Затем вам понадобятся следующие строки в вашем файле проекта qmake, если вы используете qmake:
Qt 5: QT += serialport
Qt 4: COMFIG += serialport
С помощью 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;
}
}
isValid()
сейчас устарел. isBusy()
можно использовать вместо этого, так как он вернется true
когда вы открыли порт и false
когда порт больше не существует (и он все еще открыт). Это также тот случай, когда availablePorts()
продолжает возвращать несуществующий, но открытый порт, потому что вы сохраняете порт в списке, открывая его.