Moc qt что это
Перейти к содержимому

Moc qt что это

  • автор:

Moc qt что это

На этом шаге рассмотрим метаобъектный компилятор MOC.

Метаобъектный компилятор (MOC, Meta Object Compiler) является препроцессором, который исполняется в ходе компиляции приложения, создавая, в соответствии с определением класса, дополнительный код на языке C++. Это происходит из-за того, что определение сигналов и слотов в исходном коде программы недостаточно для компиляции. Сигнально-слотовый код должен быть преобразован в код, понятный для компилятора C++. Код сохраняется в файле с прототипом имени moc_.cpp.

При работаете с файлами проекта управление MOC автоматизировано. Для создания moc-файла «вручную» можно воспользоваться следующей командой:

moc –o proc.moc proc.h

После ее исполнения MOC создаст дополнительный файл proc.moc. Для каждого класса, унаследованного от QObject, MOC предоставляет объект класса, унаследованного от QMetaObject. Объект этого класса содержит информацию о структуре объекта, например сигнально-слотовые соединения, имя класса и структуру наследования.

На следующем шаге рассмотрим компилятор ресурсов RCC.

Зачем подключают *.moc файлы в Qt?

Возможно это (и прочий вывод гугла) поможет Вам в дальнейших разборках с монстром. А вообще, *.moc это С++ текст, сгенеренный Meta-Object Compiler, moc, is the program that handles Qt’s C++ extensions.

27 июн 2013 в 6:43

2 ответа 2

Сортировка: Сброс на вариант по умолчанию

Как я понимаю, это делается тогда, когда для создания make-файлов используется не утилитка qmake, а что-то другое. Если Вы для компиляции и всего остального используете QT это делать не нужно и даже не рекомендуется. Выдержка из книжки «Макс Шлее — QT 4.5. Профессиональное программирование на C++» (стр. 66):

Созданные moc-файлы не стоит включать с помощью команды препроцессора #include «main.moc» в конец основного файла. . Лучше если они будут отдельно откомпилированы и подсоединены компоновщиком к основной программе.

Также можно привести цитатку отсюда:

The C++ source file generated by moc must be compiled and linked with the implementation of the class. If you use qmake to create your makefiles, build rules will be included that call the moc when required, so you will not need to use the moc directly.

Т.е. на мой взгляд при написании программ в QT лучше этого не делать. QT сделает все за вас.

Метаобъектный компилятор

Мета-объектная система — часть ядра Qt фреймворка для поддержки Qt расширений в С++ таких, как сигналы и слоты для коммуникации между объектами в режиме реального времени и динамических свойств системы.

Мета-объектная система содержит: класс QObject, макрос Q_OBJECT и утилиту moc(Мета-Объектный Компилятор). QObject это базовый класс для всех Qt классов. Q_OBJECT макрос используется для включения мета объектных функций в классах и на этапе компиляции moc работает как препроцессор который преобразует применения макроса Q_OBJECT в исходный код C++.

Использование мета-объектных систем прошло через некоторую критику. В документации Qt было дано несколько вещей в пользу мета-объектных систем, включая плюсы генерации кода, динамичности графических интерфейсов, автоматической связи со скриптовыми языками, не добавляя ограничений и так же хорошая, производительная разработка механизма сигналов и слотов в moc.

Ссылки [ править ]

  • «The Meta-Object System — QtCore 5.1». Qt Project. 2013-07-04. Retrieved2013-07-04.
  • «Using the Meta-Object Compiler (moc)». Qt Project. 2013-07-04. Retrieved2013-07-04.
  • «Why Does Qt Use Moc for Signals and Slots?». Qt Project. 2013-07-04. Retrieved 2013-07-04.
  • «Re-implementing Qt moc using libclang». Olivier Goffart. 2013-07-04. Retrieved 2013-07-04.

Фреймворк Qt

Qt — это кроссплатформенная среда разработки приложений для настольных компьютеров и мобильных устройств. Qt не является языком программирования сам по себе. Это фреймворк, написанный на C++. Препроцессор MOC (компилятор метаобъектов) используется для расширения языка C++ такими функциями, как сигналы и слоты. Перед этапом компиляции MOC анализирует исходные файлы, написанные на расширенном Qt C++, и генерирует из них стандартные исходные коды C++. В ОС Аврора Qt используется в качестве основной среды разработки приложений и предоставляет единообразные API для частого использования в других функциях устройства.

Следующие модули используются в ОС Аврора:

  • QtCore;
  • QtWebkit;
  • QtDBus;
  • QtGui;
  • QtLocation;
  • QtPositioning;
  • QtMultimedia;
  • QtNetwork;
  • QtQuick;
  • QtQml;
  • QtSensors;
  • QtSql;
  • QtSvg;
  • QtXml;
  • QtXmlPatterns.

Существуют модули Qt, которые не используются в ОС Аврора, но их стоит отметить:

  • QtScript;
  • QtOpengl;
  • QtQuickWidgets;
  • QtWidgets.

Подробная информация о среде разработки Qt Creator представлена в следующих источниках:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *