2009-09-02 5 views

ответ

5

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

Why does Qt use its own make tool, qmake?

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

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

10

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

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

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

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

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

+1

много ума, но никакой магии! напоминает мне http://catb.org/esr/jargon/html/magic-story.html – jrharshath

+0

И там есть 2 типа подключения. Первый: слоты вызываются во время сигнала. А второй: вызовы слотов помещаются в очередь цикла событий. Вы можете вручную выбрать метод в подключении, но сигнал соединения и слоты из разных потоков всегда поставлены в очередь. – JustAnotherCurious

Смежные вопросы