Ошибка именования слотов 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);
выполнять автоматическое соединение сигналов / слотов.