#qt #qobject
#qt #qobject
Вопрос:
Эта ссылка:http://doc.trolltech.com/4.5/moc.html#moc говорит
Инструмент moc считывает файл заголовка C . Если он находит одно или несколько объявлений класса, содержащих макрос Q_OBJECT, он создает исходный файл C , содержащий код метаобъекта для этих классов.
Что такое мета объектный код?
ПРАВКА 1
Как узнать, в каких классах я должен написать Q_OBJECT? Одним из примеров являются сигналы и слоты, есть ли другие случаи, когда это необходимо использовать?
Ответ №1:
Вы можете прочитать статью Внутренние компоненты Qt и обращение вспять, чтобы получить более глубокие знания о Qt и его moc-компиляторе (meta objet compiler). В итоге мета-объект создается компилятором Qt moc для добавления дополнительной информации в класс, такой как механизм сигналов / слотов и т.д.
Комментарии:
1. Спасибо за ссылку, я прочитаю это. Но я просто хотел, чтобы 2 или 3 строки объясняли значение «метаобъекта».
Ответ №2:
Метаобъекты улучшают языки программирования, создавая новые или манипулируя существующими объектами. Они предоставляют функциональные возможности, которыми язык фактически не обладает сам по себе. Метаобъекты интерпретируются либо во время компиляции, либо во время выполнения. В Qt и C это выполняется во время компиляции компилятором метаобъектов (moc).
Примером может служить использование концепции сигнала / слота.
Комментарии:
1. Спасибо за ответ. Пожалуйста, посмотрите мой комментарий в сообщении Донотало.
2. Всегда полезно знать, как все работает. Программисты, которым наплевать на то, что происходит под их кодом, являются (имхо) худшими программистами. Но да, MOC позволяет вам использовать функциональные возможности без необходимости реализовывать их самостоятельно, поэтому вы можете сосредоточиться на их правильном использовании вместо того, чтобы сначала заставлять их работать.
Ответ №3:
Мета-объектный код в среде Qt — это исходный файл C , который является расширенной версией исходного файла C , куда вы поместили Q_OBJECT (и / или другие связанные макросы). Код метаобъекта будет иметь вашу реализацию плюс некоторый другой дополнительный (мета) код, чтобы механизм сигналов и слотов работал.
Комментарии:
1. Означает ли это, что это не мое дело, и я не должен утруждать себя поиском того, как работает Q_OBJECT?
2. @anisha, если тебе интересно, конечно, ты можешь копнуть глубже. но вы можете изучать и использовать Qt, не беспокоясь о том, как работает Q_OBJECT. однако вам нужно узнать, когда и зачем использовать Q_OBJECT.
3. В принципе, да. Но если вы хотите использовать «invokeMethod», полезно понять основы QObject и QMetaObject.
4. @Exa, @ hmuelner Спасибо троим из вас за проявленный интерес к моей проблеме. Я подумал, что для меня было бы важно знать о жаргоне, который я использую в будущем интервью. Кто-то сказал мне, что очень важно, чтобы в вашем коде вы должны «знать» каждый алфавит, который там написан. Вот почему я был обеспокоен.
Ответ №4:
Метаобъект содержит метаинформацию об объекте, такую как его имя и текстовое описание его сигналов и слотов. Это позволяет вызывать signal по «имени». Смотрите документацию о QMetaObject и эту статью.