Макрос Q_OBJECT и код метаобъекта - PullRequest
1 голос
/ 03 мая 2011

Эта ссылка: http://doc.trolltech.com/4.5/moc.html#moc говорит

Инструмент moc читает заголовочный файл C ++. Если он находит один или несколько классов объявления, которые содержат Q_OBJECT макрос, он производит исходный файл C ++ содержащий мета-объектный код для эти классы.

Что такое мета объектный код?

РЕДАКТИРОВАТЬ 1

Как узнать, в каких классах я должен написать Q_OBJECT? Одним из примеров являются сигналы и слоты, в каких других случаях это необходимо использовать?

Ответы [ 4 ]

4 голосов
/ 03 мая 2011

Вы можете прочитать статью Внутреннее и обратное в Qt , чтобы получить глубокие знания о Qt и его компиляторе moc (компилятор meta objet). В итоге мета-объект создается компилятором moc Qt для добавления дополнительной информации в класс, такой как механизм сигнала / слота и т. Д.

2 голосов
/ 03 мая 2011

Мета-объекты улучшают языки программирования, создавая новые или манипулируя существующими объектами. Они обеспечивают функциональные возможности, которые язык фактически не имеет сам по себе. Мета-объекты интерпретируются либо по времени компиляции, либо по времени выполнения. В Qt и C ++ это делается во время компиляции Meta Object Compiler (moc).

Примером является использование концепции сигнал / слот.

1 голос
/ 03 мая 2011

Мета-объект содержит мета-информацию об объекте, такую ​​как его имя и текстовое описание его сигналов и слотов.Это позволяет называть сигнал «именем».См. Документацию о QMetaObject и этой статье .

1 голос
/ 03 мая 2011

Мета-объектный код в среде Qt - это исходный файл C ++, который является расширенной версией исходного файла C ++, в который вы положили Q_OBJECT (и / или другие связанные макросы).В мета-объектном коде будет ваша реализация плюс некоторый дополнительный (мета-код) для работы механизма сигналов и слотов.

...