У меня есть файл QML, который я пытаюсь прочитать, QVariantList, который содержит QObject Configuration::AmbientLoopConfiguration и его свойства. Я вижу, что в списке есть экземпляр объекта, который я создаю в другом месте, как и ожидалось в QML, но ожидаемые свойства mName и mFile не видны (не определены). Чего мне не хватает, чтобы получить доступ к mFile и mName?
configuration.cpp
#ifndef CONFIGURATION_H
#define CONFIGURATION_H
#include "qdom.h"
#include
#include
class Configuration : public QObject
{
Q_OBJECT
public:
Configuration();
/* non zone members */
Q_PROPERTY(QVariantList getAmbientLoopConfigurations READ getAmbientLoopConfigurations CONSTANT)
struct AmbientLoopConfiguration {
QString mName = "foo";
QString mFile = "bar";
};
struct ShellyConfiguration {
QString mID;
QString mIP;
};
struct CameraConfiguration {
QString mName;
QString mLowRTSP;
QString mMedRTSP;
QString mHighRTSP;
};
struct PresetConfiguration {
QString mName;
QString mColorCode;
};
struct SceneItemConfiguration {
bool mState;
QString mDevice;
QString mColorCode;
};
struct SceneGroupConfiguration {
QString mName;
QList mZones;
QList mSceneItems;
};
/* zone members */
struct LightConfiguration {
QString mName;
QString mShellyID;
};
struct SensorConfiguration {
QString mName;
QString mID;
};
struct ZoneConfiguration {
QString mName;
QString mColorCode;
QList mLightConfigurations;
QList mSensorConfigurations;
};
/* base config object */
struct Config
{
QList mZoneConfigurations;
QList mShellyConfigurations;
QList mCameraConfigurations;
QList mPresetConfigurations;
QList mSceneGroupConfigurations;
QList mAmbientLoopConfigurations;
};
Q_INVOKABLE Config getConfiguration() { return this->config; };
QVariantList getAmbientLoopConfigurations() {
QVariantList l;
for (Configuration::AmbientLoopConfiguration &c : this->config.mAmbientLoopConfigurations) {
l.append(QVariant::fromValue(c));
}
return l;
};
Q_INVOKABLE bool loadBaseConfiguration();
Q_INVOKABLE bool loadUserDefinedConfiguration();
private:
Config config;
QDomDocument validateConfigFile(QString config);
};
#endif // CONFIGURATION_H
main.cpp
Configuration *configuration = new Configuration();
configuration->loadBaseConfiguration();
configuration->loadUserDefinedConfiguration();
..
qmlRegisterType("smah.configuration", 1, 0, "Configuration");
qmlRegisterType("smah.configuration.ambient", 1, 0, "ConfigurationAmbient");
..
engine.rootContext()->setContextProperty("configuration", configuration);
Media.qml
import QtQuick 2.0
import QtQuick.Layouts 1.3
import QtQuick.Controls 2.13
import QtMultimedia
import smah.configuration
import smah.configuration.ambient
import "."
import "qrc:/SMAHComponents"
Page {
id: page
x: 0
Component.onCompleted: {
console.log(configuration.getAmbientLoopConfigurations[0])
console.log(configuration.getAmbientLoopConfigurations[0].mName)
}
}
Вывод приведенного выше кода
QVariant(Configuration::AmbientLoopConfiguration, )
undefined
Подробнее здесь: https://stackoverflow.com/questions/798 ... t-from-qml