У меня есть следующая упрощенная настройка, где я пытаюсь получить доступ к Q_Properties в классе унаследованного класса класса, который наследуется от QObject. Я могу получить доступ к свойствам базового класса просто отлично, но я не могу найти или увидеть (при отладке) свойства моего унаследованного класса:Доступ к Q_Properties класса, унаследованного от объекта, унаследованного от QObject
Базовый класс:
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;
}
Он отлично работает, но мой выход будет похож на «модель: toyota» и не будет включать в себя емкость.
Единственный способ получить свойства моих подклассов - добавить виртуальный метод get и set и дополнительный Q_property к базовому классу, который не кажется правильным вообще и невозможен при обычных обстоятельствах где у меня нет доступа к базовому классу.
Почему вы удаляете мо? – dtech
@ddriver Я сделал это, пока не уверен, думал, так как это указатель, так как он обновляется на каждой итерации, которую я должен очистить? Или это ненужно полностью из-за того, что это QObject? – topher
Не удаляйте его, вы идете в неопределенное поведение. Возвращаемый указатель просто указывает на метаобъект, он не выделяется динамически и не должен быть удален. – dtech