Qt - Q_OBJECT против #include <QObject> - PullRequest
4 голосов
/ 14 апреля 2011

Имеет ли использование макросов Q_Object и #include <QObject> одинаковый эффект? Другими словами, являются ли они двумя разными способами для одной и той же цели?

Спасибо.

Ответы [ 3 ]

11 голосов
/ 14 апреля 2011

Нет.Вам нужно Q_OBJECT в определении класса вещей, которые вы хотите использовать для сигналов / слотов, в дополнение к включению правильных заголовков.

Из QObject api docs :

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

Просто посмотрите на различные примеры в документации Qt для получения более подробной информации и примера кода.Справочник Сигналы и слоты - хорошее место для поиска.Также обратите внимание на справочник Object Model .

3 голосов
/ 14 апреля 2011

Они используются для двух разных целей.

Q_OBJECT :

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

Если вы хотите использовать сигналы, слоты и другие функции мета-объекта, вам необходим макрос Q_OBJECT.

#include<QObject>:

Используется для включения заголовочного файла qobject.h, так что вы можете использовать функции, доступные в классе QObject .. Скажите, например, QObject::connect().

А для использования макроса Q_OBJECT необходимо #include <QObject>.

0 голосов
/ 14 апреля 2011

Нет. Вы добавляете этот макрос в классы, производные от QObject. Но вам все еще нужны заголовки, как говорит Мэт! Смотри http://doc.qt.io/qt-5/qobject.html#Q_OBJECT

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...