Функции, для которых требуется макрос Q_OBJECT в Qt 4, отличный от механизма сигнальных слотов

#c #qt #qt4

#c #qt #qt4

Вопрос:

Я использую Qt 4.5 в Windows XP. Я знаю, что мы должны использовать Q_OBJECT макрос для механизма подключения сигнальных слотов. Но помимо этого, есть ли какие-либо другие причины использовать Q_OBJECT макрос? Недавно я узнал, что для некоторых других функций метаобъекта нам требуется Q_OBJECT объявление. Что это за функции рядом с сигнальными слотами? Я пытался найти документацию по этому поводу, но не смог найти ничего полезного. Любые указания на этот счет приветствуются.

Ответ №1:

Вы можете найти все, что вам нужно знать о том, когда требуется макрос Q_OBJECT здесь:

http://doc.qt.digia.com/4.6/metaobjects.html

В резюме он нужен для сигналов и слотов, чтобы использовать tr для трансляции, извлекать имя класса в режиме реального времени из QObject, знать, наследуется ли он от другого класса (instrospection), устанавливать свойства и иметь возможность вызывать newInstance.

Надеюсь, это поможет.

Комментарии:

1. Вам не нужно это, чтобы знать, наследует ли данный класс от другого. Контрпример см. в разделе Boost features.

2. Извините, я должен был сказать, что вы также можете использовать его для вместо того, чтобы вам это нужно для 🙂

Ответ №2:

AFAIK его можно использовать для восстановления метаинформации (имен слотов сигналов, переменных) и обеспечивает поддержку отслеживания прав собственности на объекты. (он же. просто создайте new и передайте родительские объекты этим объектам, и они будут удалены детерминированно по прошествии времени родительского объекта.)