moc генерирует во время компиляции список слотов и сигналов на основе того, как вы объявили их в классах, использующих макрос Q_OBJECT
.
Этот список представляет собой список строк, поэтому, если вы объявили:
signals:
void test(Base*);
элементом в списке будет строка "test(Base*)"
(этот список можно увидеть в переменной qt_meta_YourClass
файла moc_yourclass.cpp
в выходном каталоге).
Макросы SIGNAL
и SLOT
также возвращают строки, connect()
канонизируют их, поэтому они форматируются так же, как в списке, сгенерированном moc, и сравнивают их с теми, что в этом списке.
Когда вы выводите класс, строка не изменилась, поэтому вам все равно придется использовать SIGNAL(test(Base*))
.