Это хорошее решение. У меня сейчас проект, в котором нужно некритичную ошибку при работе, записать в лог и продолжить работу. Записью в лог занимается главное окно. А у дочерних окон, есть поддочерние и так далее.. глубина вложенности по классам по 4-5. Там с помощью публичных функций не так просто это сделать, нужно будет постоянно таскать за собой указатель на главное окно. Вот тут и выручают сигналы-слоты.
class MainClass(...){
private:
public:
private slots:
void catchError(QString);
}
class SubClass(...){
private:
public:
signals:
void throwError(QString);
}
class SubSubClass(...){
private:
public:
signals:
void throwError(QString);
}
// тогда работа будет выглядеть так:
// subClass.cpp
SubSubClass sc(this);
QObject::connect(&sc, SIGNAL(throwError(QString)), this, SIGNAL(throwError(QString))); // соединяем не сигнал со слотом, а сигнал с сигналом.
// в результате можно отловить любое событие главным окном от дочернего любого уровня вложенности без таскания указателя главного окна и без создания промежуточных слотов
Наверняка есть более эстетичные способы это сделать, я не профессионал. Но про то, что можно сигнал с сигналом соединять, где-то читал