Подтвердить что ты не робот

Вопрос Qt: Как работают сигналы и слоты?

Как сигналы и слоты работают при абстракции высокого уровня?

Как сигналы и слоты реализованы при абстракции высокого уровня?

4b9b3361

Ответ 2

Как говорили другие люди, для этой темы есть очень хорошая Qt-документация. Если вы хотите знать, что происходит под капотом, эта информация может вам помочь:

Слоты - это обычные методы. Ничего особенного там, EXCEPT moc сохранит свою подпись в таблице в промежуточном файле .moc - вы можете увидеть эту таблицу довольно четко, просматривая этот файл.

В этой таблице вы можете вызвать метод с использованием его подписи. Макрос SLOT(mySlot(int)) сводится к строковому представлению рассматриваемого метода. Это можно сделать несколькими способами, см., Например, документацию QMetaObject.

Когда вы подключаете сигнал к слоту, сигнальные и слотовые сигнатуры сохраняются для последующего использования. Когда излучается сигнал, все слоты, ранее подключенные к этому сигналу, вызываются с использованием метода, описанного выше.

Если вы хотите узнать больше, я предлагаю просмотреть код, сгенерированный moc, и пройти через излучение сигнала и внутренности вызова connect(). Здесь нет волшебства, но есть много умных способностей.

Ответ 3

Мы несколько ответили на это в другом вопросе

Почему Qt использует собственный инструмент make, qmake?

Но, чтобы перейти к более подробному описанию, MOC анализирует ваш файл, который ищет объявления о сигнале/слоте (а также свойства и другие поддерживаемые конструкции) и создает на их основе промежуточные файлы кода. Эти промежуточные файлы кода обеспечивают строго типизированный доступ к сигналам и слотам библиотеки, которые будут использоваться для связи с вашими объектами.

qmake генерирует make файл, который автоматически включает в себя эти промежуточные файлы (а также любые созданные пользовательские интерфейсы или файлы ресурсов), а также ваш собственный код, поэтому вы можете создавать с помощью своей цепочки инструментов.