Что делает макрос Q OBJECT? Почему все объекты Qt нуждаются в этом макросе?



Я только начал использовать Qt и заметил, что все пример определения класса есть макрос Q_OBJECT в первой строке. Какова цель этого макроса препроцессора?

1660   5  

5 ответов:

с документации Qt:

компилятор Метаобъектов, moc, является программа, которая обрабатывает Qt C++ увеличение.

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

Он просто говорит предкомпилятору, что этот класс имеет элементы gui и должен быть запущен через " moc " вам нужно только добавить это в классы, которые используют механизм сигнала/слота.
Но он будет спокойно проигнорирован в любых других классах-он просто добавляет время сборки.

MOC (meta object compiler) преобразует файлы заголовков, включенные в макрос Q_OBJECT, в эквивалентный исходный код C++. Он в основном управляет механизмом сигнального слота и делает его понятным для компилятора C++

макрос Q_OBJECT должен появиться в закрытом разделе определения класса, который объявляет свои собственные сигналы и слоты или использует другие сервисы, предоставляемые метаобъектной системой Qt.

1 из документации Qt Метаобъектная Система

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

2 От Qt документация Q_OBJECT

макрос Q_OBJECT должен появиться в закрытом разделе определения класса, который объявляет свои собственные сигналы и слоты или использует другие сервисы, предоставляемые метаобъектной системой Qt.

3 из документации Qt moc

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

4 из документации Qt сигналы и слоты

макрос Q_OBJECT расширяется препроцессором для объявления нескольких функций-членов, реализуемых moc; если вы получаете ошибки компилятора по строкам " undefined ссылка на vtable для LcdNumber", вы, вероятно, забыли запустить moc или включить вывод moc в команду link.

Comments

    Ничего не найдено.