Вчера я работал с проектом в Qt, поэтому я сделал отложенный звонок в слот, который, по моему мнению, был публичным. Итак, я написал:
QTimer::singleShot();
позвонив в этот слот, но, наконец, я увидел, что этот слот был закрытым.
Это может быть обходной путь для частных слотов:
QTimer::singleShot(0,class,SLOT(class::privateSlot()))
Почему возникает такое несоответствие при объявлении в Qt?
Немного расширяется ответ @ hate-engine
Узнайте и посмотрите на файл с именем вашего источника и префиксом moc_
(например moc_my_class.cpp
). Этот файл был сгенерирован moc-компилятором при добавлении Q_OBJECT
макрос в вашем объявлении класса. Этот макрос добавляет пару методов к вашему объявлению класса, и moc_my_class.cpp
содержит определения этих методов.
Теперь посмотрим на метод MyClass::qt_metacall
, Этот метод можно вызвать из другого места, потому что он общедоступный. С другой стороны, он может вызывать частные методы MyClass
потому что они принадлежат к классу MyClass
,
Там нет загадки))
Других решений пока нет …