Правильное использование Q_OBJECT? - PullRequest
0 голосов
/ 10 июня 2010

Если я получаю свой класс из QObject (или подкласса), документация Qt говорит, что я должен поместить макрос Q_OBJECT в мое объявление класса.

Он также говорит, что мне нужно "запустить компилятор мета-объекта "для моего класса.

Я понятия не имею, как это сделать.Это то, что мне нужно добавить в .pro-файл?Нужно ли редактировать make-файл?Это кажется слишком сложным для простого производного класса.

Я использую Qt Creator.

РЕДАКТИРОВАТЬ:

Спасибо за помощь.Я обнаружил нечто очень важное: когда я создаю новый класс в Qt Creator, я должен указать «Inherits QWidget» в качестве информации о типе, даже если я уже указываю виджет Qt в качестве базового класса (например, QTextEdit),Кажется странным, что Qt Creator не может понять это самостоятельно, но это, похоже, решает мои проблемы с сигналом / слотом и moc.

Ответы [ 3 ]

4 голосов
/ 10 июня 2010

Qt использует компилятор moc для создания своей мета-объектной системы (которая, помимо прочего, требуется для самоанализа классов и учета сигналов / слотов).

По умолчанию qmake будет делатьправильная вещь при генерации и компиляции moc_*.cpp файлов.

2 голосов
/ 10 июня 2010

Если ваши классы собираются на использовать сигналы и слоты , используйте макрос Q_OBJECT. Остальное не нужно. Если нет сигналов и слотов, просто продолжайте с обычным способом использования классов на С ++, и все должно работать нормально. Вы не будете специально создавать файлы moc _ *. Cpp, но, как сказал «theatrus», qmake сделает это за вас. Надеюсь, это поможет.

1 голос
/ 10 июня 2010

Q_OBJECT просто необходимо поместить в объявление класса, например:

class MyObject : public QObject {
   Q_OBJECT

   // etc.
};
...