Шаг 17.
Библиотека Qt.
Метаобъектная информация - класс QMetaObject

    На этом шаге рассмотрим класс 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.




Предыдущий шаг Содержание Следующий шаг