Как сигналы и слоты работают на абстракции высокого уровня?Вопрос Qt: Как работают сигналы и слоты?
Как сигналы и слоты реализованы при абстракции высокого уровня?
Как сигналы и слоты работают на абстракции высокого уровня?Вопрос Qt: Как работают сигналы и слоты?
Как сигналы и слоты реализованы при абстракции высокого уровня?
Я на самом деле читать эту страницу Qt об этом, и он делает хорошую работу по объяснению:
Мы несколько ответили на вашем другом вопросе
Why does Qt use its own make tool, qmake?
Но идти в несколько более подробно, MOC разбирает файл ищет сигнальные декларации/слота (а также свойства и другие поддерживаемые конструкции) и генерирует промежуточные файлы кода на их основе. Эти промежуточные файлы кода обеспечивают строго типизированный доступ к сигналам и слотам для использования библиотекой для связи с вашими объектами.
qmake создает файл makefile, который автоматически включает в себя эти промежуточные файлы (а также любые файлы пользовательского интерфейса или файлов ресурсов), а также ваш собственный код, поэтому вы можете создавать с помощью своей цепочки инструментов.
Как сказали другие люди, есть очень хороший Qt documetnation доступен по этой теме. Если вы хотите знать, что происходит под капотом, эта информация может вам помочь:
Слоты - это обычные методы. Ничего особенного там, EXCEPT moc сохранит свою подпись в таблице в промежуточном файле .moc - вы можете увидеть эту таблицу довольно четко, просматривая этот файл.
Эта таблица позволяет вам вызвать метод с использованием его подписи. Макрос SLOT(mySlot(int))
сводится к строковому представлению рассматриваемого метода. Есть несколько способов сделать это, например, см. Документацию для QMetaObject.
Когда вы подключаете сигнал к слоту, сигнальные и слотовые сигнатуры сохраняются для последующего использования. Когда выдается сигнал, все слоты, ранее подключенные к этому сигналу, вызываются с использованием метода, описанного выше.
Если вы хотите узнать больше, я предлагаю просмотреть код, сгенерированный moc, и пройти через излучение сигнала и внутренности вызова connect(). Здесь нет никакой магии, но есть много сообразительности.
много ума, но никакой магии! напоминает мне http://catb.org/esr/jargon/html/magic-story.html – jrharshath
И там есть 2 типа подключения. Первый: слоты вызываются во время сигнала. А второй: вызовы слотов помещаются в очередь цикла событий. Вы можете вручную выбрать метод в подключении, но сигнал соединения и слоты из разных потоков всегда поставлены в очередь. – JustAnotherCurious
Это действительно очень хорошее объяснение.
я получаю зуд об этом орфография тоже .. бог знает почему – jrharshath