Заявление о несоответствии в частных слотах Qt

Вчера я работал с проектом в Qt, поэтому я сделал отложенный звонок в слот, который, по моему мнению, был публичным. Итак, я написал:

QTimer::singleShot();

позвонив в этот слот, но, наконец, я увидел, что этот слот был закрытым.

Это может быть обходной путь для частных слотов:

QTimer::singleShot(0,class,SLOT(class::privateSlot()))

Почему возникает такое несоответствие при объявлении в Qt?

2

Решение

Немного расширяется ответ @ hate-engine

Узнайте и посмотрите на файл с именем вашего источника и префиксом moc_ (например moc_my_class.cpp). Этот файл был сгенерирован moc-компилятором при добавлении Q_OBJECT макрос в вашем объявлении класса. Этот макрос добавляет пару методов к вашему объявлению класса, и moc_my_class.cpp содержит определения этих методов.

Теперь посмотрим на метод MyClass::qt_metacall, Этот метод можно вызвать из другого места, потому что он общедоступный. С другой стороны, он может вызывать частные методы MyClassпотому что они принадлежат к классу MyClass,

Там нет загадки))

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]