1) Чем тебе не нравятся предложенные варианты. Поясни.
тем, что в них приходится над штатными средствами Qt морочить еще надстройку, и не забывать ее использовать
2) Уточни что за обработка ошибок, в каких случаях, ...
библиотека написана на С, там просто устанавливается код ошибки, и даже не всегда возвращается false, то есть, надо после вызова функции проверять глобальную переменную на 0, надстройка над этой библиотекой написана на С++, и с Qt никак не связана, дополнительные функции просто также устанавливают код ошибки в этой же переменной - поэтому самое последнее предложение высылать сигнал не проходит в принципе
слоты - это простые короткие переходники, которые получают сигналы и вызывают функции библиотеки или надстройки над ней
среднее предложение, высылать сигнал сразу после высылки основного тоже не годится, потому как подавляющее большинство сигналов высылаются виджетами, созданными в QtDesigner, и кроме этого, сигналов гораздо больше, чем слотов - поэтому более кошерно сделать простое макро типа
#define returnSlot {GloballErrorMessage();return;}
где глобальная функция GloballErrorMessage() проверяет наличие кода ошибки, если он есть, выдает сообщение, и сбрасывает код в 0 - и использовать в конце каждого слота этот макрос вместо return - единственный минус тут - не забыть, что надо писать не return - хотя это конечно тоже хак...
но тут другой момент... вроде бы получается перевести все слоты в один объект, наследующий QMainWindow, а там вроде есть подходящий обработчик