Hard-Soft News

Новости железа и софта

Функция для копирования свойств объектов

Функция, копирующая свойства объектов Qt. Объект-источник и объект-приемник могут принадлежать разным классам. Функция пытается скопировать значения свойств с совпадающими именами. Наглядно демонстрирует принципы работы с мета-объектами.

#include <QObject>
#include <QMetaObject>
#include <QStringList>
#include <QVariant>
#include <QMetaProperty>

void copyProperties(QObject * to, QObject * from)
{
    const QMetaObject * metaTo = to->metaObject();
    const QMetaObject * metaFrom = from->metaObject();
    QStringList toProperties;
    for (int i = 0; i < metaTo->propertyCount(); i++) {
        if (metaTo->property(i).isWritable())
            toProperties.append(QString::fromAscii(metaTo->property(i).name()));
    }
    for (int i = 0; i < metaFrom->propertyCount(); i++) {
        if (toProperties.contains(QString::fromAscii(metaFrom->property(i).name())))
            to->setProperty(metaFrom->property(i).name(), from->property(metaFrom->property(i).name()));
    }
}

Пример использования:

copyProperties(ui->label, ui->lineEdit);

Комментировать