Russian Qt Forum

Qt => Общие вопросы => Тема начата: Dragon от Май 25, 2010, 15:45



Название: Потребность макроса Q_OBJECT в разрабатываемых классах.
Отправлено: Dragon от Май 25, 2010, 15:45
Макрос Q_OBJECT нужно использовать обязательно в классах, наследуемых от QObject, где используются сигналы, слоты и свойства. В некоторых статьях читал, что рекомендуют использовать макрос внезависимости от того используются ли сигналы, слоты и свойства или нет т.к. некоторые функции могут вести себя неправильно.

Как обстоит дело в реальной жизни, на реальных проектах? Сильно влияет на скорость, размер и др. критические параметры ПО присутствие/отсутствие сего макроса?


Название: Re: Потребность макроса Q_OBJECT в разрабатываемых классах.
Отправлено: ритт от Май 25, 2010, 16:11
Макрос Q_OBJECT нужно использовать обязательно в классах, наследуемых от QObject, где используются сигналы, слоты и свойства и/или для данного класса будет использоваться qobject_cast и/или tr().
в общем, проще и надёжнее его использовать, чем нет...


Название: Re: Потребность макроса Q_OBJECT в разрабатываемых классах.
Отправлено: Rcus от Май 25, 2010, 16:27
Ну так можно и посмотреть что из себя представляет данный макрос, \see $QTDIR/src/corelib/kernel/qobjectdefs.h (L:155 Qt-4.6.0)
Влияние на размер кода ничтожно (\try nm -CS $some_app | grep qt_meta).
Отрицательное влияение на производительность... хм... ... ... ... Хотел написать про qobject_cast и последовательность strcmp, но, пожалуй, не стану.


Название: Re: Потребность макроса Q_OBJECT в разрабатываемых классах.
Отправлено: SASA от Май 26, 2010, 15:19
Макрос Q_OBJECT "добавляет" мето-объектную информацию, некий аналог RTTI.
Если какая-то функция захочет получить такую инфу от вашего класса, в котором нет Q_OBJECT, то обругается компилятор.
Я бы советовал добавлять макрос по мере надобности.
Недостаток у него один - усложняет компиляцию.