Обработка ошибок внутри внутренних методов класса не является хорошей практикой.
Решение @ Eelke хорошо, если ваш класс smtp_listener
выходит за пределы QObject.Но если у вас есть «чистый» класс (без каких-либо отношений Qt, например, из внешней библиотеки), вы должны выдать исключение или , вернуть значение ошибки (или объект, представляющийсостояние ошибки).
Этот подход дает вам возможность организовать обработку ошибок в одном месте (класс GUI в вашем случае).Это хорошее преимущество как для вас, так и для других программистов, которые читают ваш код.
Кстати, вы можете объединить @ ответ Eelke с моим, используя такой код:
функция, возвращающая ошибку:
int smtp_listener::pop3Stat(QString reply)
{
if(reply.contains("+OK"))
{
*t << "stat" <<"\r\n";
t->flush();
setState(POP3_Read);
return 0; // success
}
return 1; // return not null value with error
}
Код для обработки ошибки:
/// slot to handle an error
/// don't forget to connect errorSignal with it
void MainWidnow::errorSignalSlot(int status)
{
QMessageBox::critical(this, "Error", "Error code: " + QString::number(status));
}
void MainWidnow::button_onClick()
{
int status = listener.pop3Stat(reply);
if (status != 0) // not null value means error
{
emit(errorSignal(status)); // emit the signal with error code
}
else
{
qDebug() << "success";
}
}