i use ;

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();
}
}

BUT
if USB serial cable is unplugged, my program wants to stay in " if (error == QSerialPort::ResourceError) {...} " loop so always give me error message despite close the error messages again and again.