QObjectから継承するクラスの継承されたクラスのQ_Propertiesにアクセスしようとしている次の単純化されたセットアップがあります。基本クラスのプロパティには問題なくアクセスできますが、(デバッグ中に) 継承されたクラスのプロパティを見つけたり、表示したりできません。
基本クラス:
class Vehicle : public QObject
{
Q_OBJECT
Q_PROPERTY(QString model READ getModel WRITE setModel)
public:
explicit Vehicle(QObject *parent = 0);
QString getModel() const;
void setModel(QString model);
virtual QString toString() const;
private:
QString _model;
};
継承クラス:
class TransportVehicle : public Vehicle
{
Q_PROPERTY(int Capacity READ getCapacity WRITE setCapacity)
public:
TransportVehicle();
TransportVehicle(int, QString, int);
int getCapacity() const;
void setCapacity(int);
QString toString() const;
private:
int _maxCapacity;
};
ジェネリック メソッドからの次のスニペットは、渡されたリストで見つかったオブジェクトのプロパティにアクセスします。
int write(QObjectList* list) {
int count = 0;
for(int i = 0; i < list->size(); i++)
{
const QMetaObject *mo = list->at(i)->metaObject();
for(int k = mo->propertyOffset(); k < mo->propertyCount(); k++)
{
const QMetaProperty prop = mo->property(k);
QString name = prop.name();
QString valStr = prop.read(list->at(i)).toString();
QDebug << name << ": " << valStr << endl;
count++;
}
delete mo;
}
return count;
}
私の出力が「モデル:トヨタ」のようになり、容量が含まれないことを除いて、それは正常に機能します。
サブクラスのプロパティを取得できた唯一の方法は、仮想の get および set メソッドと追加の Q_property を基本クラスに追加することです。基本クラスにアクセスできません。