Для установки нажмите кнопочку Установить расширение. И это всё.

Исходный код расширения WIKI 2 регулярно проверяется специалистами Mozilla Foundation, Google и Apple. Вы также можете это сделать в любой момент.

4,5
Келли Слэйтон
Мои поздравления с отличным проектом... что за великолепная идея!
Александр Григорьевский
Я использую WIKI 2 каждый день
и почти забыл как выглядит оригинальная Википедия.
Статистика
На русском, статей
Улучшено за 24 ч.
Добавлено за 24 ч.
Альтернативы
Недавние
Show all languages
Что мы делаем. Каждая страница проходит через несколько сотен совершенствующих техник. Совершенно та же Википедия. Только лучше.
.
Лео
Ньютон
Яркие
Мягкие

Из Википедии — свободной энциклопедии

Мета-объектная система в Qt framework предоставляет поддержку дополнительных возможностей в языке C++, необходимое для интроспекции и рефлексии, предоставляя класс QObject с некоторым функционалом, как базовый. Фактически подавляющее большинство классов в Qt являются наследниками этого класса и реализуют данную систему.[1]

Реализация

Мета-объектная система включает в себя: класс QObject, утилиту moc(Мета-Объектный Компилятор) и необязательный макрос Q_OBJECT.

  1. QObject является базовым классом для всех классов Qt
  2. Мета-объектный компилятор предоставляет каждому подклассу QObject необходимый код на C++, для реализации мета-объектных возможностей, с учетом наличия или отсутствия макроса Q_OBJECT. Компилятор, не изменяет исходный файл, а создает другой содержащий метаобъектный код для каждого из этих классов.
  3. Макрос Q_OBJECT необходим мета-объектному компилятору. Находя данный макрос в исходном коде, компилятор объявляет некоторые функции, которые необходимы для анализа внутреннего состояния и должны быть реализованы в каждом подклассе QObject: metaObject(), tr(), qt_metacall() и некоторые другие.[2]

Допустимо использовать QObject в качестве базового класса и без макроса Q_OBJECT и без мета-объектного кода. Однако в таком случае, ни сигналы и слоты, ни другие возможности, описанные ниже, не будут доступны. С точки зрения метаобъектной системы, подкласс QObject без мета-кода аналогичен своему ближайшему предку с мета-объектным кодом. Это означает, что QMetaObject :: className () вернет не фактическое имя вашего класса, а имя класса этого предка.

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

Класс QObject, при наличии макроса Q_OBJECT содержит в себе поддержку:

  1. Метаобъектной информации. Она включает в себя информацию о наследовании классов, что позволяет определять являются ли классы непосредственными наследниками, а так же узнать имя класса. Предоставляется и информация о мета-методах класса (сигналах, слотах и других вызывающихся функциях с макросом Q_INVOKABLE).
  2. Динамического приведения типов с помощью qobject_cast () для классов QObject . Функция qobject_cast () ведет себя аналогично стандартной C ++ dynamic_cast() с теми преимуществами, что она не требует поддержки RTTI и работает через границы динамических библиотек. Функция пытается привести свой аргумент к типу указателя, указанному в угловых скобках, возвращая ненулевой указатель, если объект имеет правильный тип (определенный во время выполнения), или nullptr , если тип объекта несовместим.
  3. Таймера, и соответственно цикл обработки событий. Дополнительно имеется механизм фильтрации, для перехвата данных событий.
  4. Возможность интернационализации приложения с помощью методов QObject::tr() и QObject::trUtf8().
  5. Поддержку сигналов и слотов , которые используются для связи между слабо-связанными объектами.
  6. Поддержка свойств, для получения информации об объектах Qt, не из C++ кода, например из QML или Qt Script.

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

Ссылки

  1. The Meta-Object System - QtCore 5.1. Qt Project (4 июля 2013). Дата обращения: 4 июля 2013. Архивировано 26 августа 2013 года.
  2. Using the Meta-Object Compiler (moc). Qt Project (4 июля 2013). Дата обращения: 4 июля 2013. Архивировано 26 августа 2013 года.
  3. Why Does Qt Use Moc for Signals and Slots? Qt Project (4 июля 2013). Дата обращения: 4 июля 2013. Архивировано 20 октября 2013 года.
  4. Re-implementing Qt moc using libclang. Olivier Goffart (4 июля 2013). Дата обращения: 4 июля 2013. Архивировано 15 июля 2013 года.
Эта страница в последний раз была отредактирована 18 сентября 2023 в 21:46.
Как только страница обновилась в Википедии она обновляется в Вики 2.
Обычно почти сразу, изредка в течении часа.
Основа этой страницы находится в Википедии. Текст доступен по лицензии CC BY-SA 3.0 Unported License. Нетекстовые медиаданные доступны под собственными лицензиями. Wikipedia® — зарегистрированный товарный знак организации Wikimedia Foundation, Inc. WIKI 2 является независимой компанией и не аффилирована с Фондом Викимедиа (Wikimedia Foundation).