【发布时间】:2013-10-04 06:19:22
【问题描述】:
有没有使用 Qt 发送信号的方法,或任何其他方法来判断 USB 串行电缆是否已拔出?
【问题讨论】:
标签: c++ qt qtcore qt-signals qtserialport
有没有使用 Qt 发送信号的方法,或任何其他方法来判断 USB 串行电缆是否已拔出?
【问题讨论】:
标签: c++ qt qtcore qt-signals qtserialport
isValid() 现已过时。可以使用 isBusy() 代替,因为它会在您打开端口时返回 true,而在端口不再存在时返回 false(并且您仍然打开它)。当availablePorts() 不断返回不存在但已打开的端口时也是这种情况,因为您通过打开端口将其保留在列表中。
【讨论】:
使用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;
}
}
【讨论】:
您可以在 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
【讨论】:
QSerialPortInfo 在使用端口之前对其进行验证。
ResourceError?我偶尔会在一些串行端口通信的中间看到它,但我仍然能够在端口上发送和接收一些数据。 (我的通信层开始表现不佳,但似乎并没有完全损坏——一些有效的数据包仍然可以通过。)