На этом шаге рассмотрим класс QMetaObject.
Каждый объект, созданный от класса QObject или от унаследованного от него класса, располагает структурой данных, называемой метаобъектной информацией (класс QMetaObject). В ней хранится информация о сигналах, слотах (включая указатели на них), о самом классе и о наследовании.
Получить доступ к этой информации можно посредством метода QObject::metaObject(). Таким образом, для того чтобы узнать, например, имя класса объекта, от которого он был создан, можно поступить следующим образом:
qDebug() << pobj1->metaObject()->className();
Для того чтобы сравнить имя класса с известным, можно поступить так:
if (pobj1->metaObject()->className() == "MyClass") { // Выполнить какие-либо действия }
Для получения информации о наследовании классов существует метод inherits(const char*), который определен непосредственно в классе QObject и возвращает значение true, если класс объекта унаследован от указанного в этом методе класса либо создан от данного класса, иначе метод возвращает значение false. Например:
if(pobj->inherits("QWidget")) { QWidget* pwgt = static_cast<QWidget*>(pobj); // Выполнить какие-либо действия с pwgt }
Метаобъектную информацию использует и операция приведения типов qobject_cast<T>. Таким образом, при помощи метода inherits() пример можно изменить:
QWidget* pwgt = qobject_cast<QWidget*>(pobj); if(pwgt) { // Выполнить какие-либо действия с pwgt }
На следующих шагах будем рассматривать элементы управления, и начнем с класса QWidget.