Ошибка именования слотов Qt 5.9

Я использую Qt 5.9.

У меня проблема с объявлением слотов со стилем подчеркивания, особенно когда я называю его более чем двумя подчеркиваниями. Например, с void on_stop_treatment() слот, даже если я не устанавливаю соединение, я получаю QMetaObject::connectSlotsByName: No matching signal for on_stop_treatment(),

В любом случае, при установлении соединения, даже если я получаю одно и то же сообщение, механизм сигналов слота работает. Сняв второе подчеркивание, я не получаю сообщения об ошибке и механизм работает. (Я также попытался удалить файл moc и пересобрать)

1 ответ

Решение

Объявление вашего слота с именем on_stop_treatment будет конфликтовать с функцией Qt, называемой Автоматическое соединение Сигнал / Слот

Qt определит этот специфический синтаксис для вашего слота и попытается найти соответствие stop с именем QObject stop а также treatment с сигналом того имени, объявленного в классе объекта QObject.

Для достижения этого Qt использует внутренне QMetaObject::connectSlotsByName(this); выполнять автоматическое соединение сигналов / слотов.

Другие вопросы по тегам