Как сигналы и слоты работают при абстракции высокого уровня?
Как сигналы и слоты реализованы при абстракции высокого уровня?
Как сигналы и слоты работают при абстракции высокого уровня?
Как сигналы и слоты реализованы при абстракции высокого уровня?
Я действительно прочитал эту страницу Qt об этом, и он хорошо объясняет:
Как говорили другие люди, для этой темы есть очень хорошая Qt-документация. Если вы хотите знать, что происходит под капотом, эта информация может вам помочь:
Слоты - это обычные методы. Ничего особенного там, EXCEPT moc сохранит свою подпись в таблице в промежуточном файле .moc - вы можете увидеть эту таблицу довольно четко, просматривая этот файл.
В этой таблице вы можете вызвать метод с использованием его подписи. Макрос SLOT(mySlot(int))
сводится к строковому представлению рассматриваемого метода. Это можно сделать несколькими способами, см., Например, документацию QMetaObject.
Когда вы подключаете сигнал к слоту, сигнальные и слотовые сигнатуры сохраняются для последующего использования. Когда излучается сигнал, все слоты, ранее подключенные к этому сигналу, вызываются с использованием метода, описанного выше.
Если вы хотите узнать больше, я предлагаю просмотреть код, сгенерированный moc, и пройти через излучение сигнала и внутренности вызова connect(). Здесь нет волшебства, но есть много умных способностей.
Мы несколько ответили на это в другом вопросе
Почему Qt использует собственный инструмент make, qmake?
Но, чтобы перейти к более подробному описанию, MOC анализирует ваш файл, который ищет объявления о сигнале/слоте (а также свойства и другие поддерживаемые конструкции) и создает на их основе промежуточные файлы кода. Эти промежуточные файлы кода обеспечивают строго типизированный доступ к сигналам и слотам библиотеки, которые будут использоваться для связи с вашими объектами.
qmake генерирует make файл, который автоматически включает в себя эти промежуточные файлы (а также любые созданные пользовательские интерфейсы или файлы ресурсов), а также ваш собственный код, поэтому вы можете создавать с помощью своей цепочки инструментов.
Это действительно очень приятное объяснение.