Von QML aus kann nicht auf alle Klassenmitglieder in QVariantList zugegriffen werdenC++

Programme in C++. Entwicklerforum
Anonymous
 Von QML aus kann nicht auf alle Klassenmitglieder in QVariantList zugegriffen werden

Post by Anonymous »

Ich habe eine QML-Datei, aus der ich eine QVariantList lesen möchte, die eine QObject Configuration::AmbientLoopConfiguration und ihre Eigenschaften enthält. Ich kann sehen, dass die Liste die Instanz des Objekts enthält, das ich an anderer Stelle in QML erstelle, aber die erwarteten Eigenschaften mName und mFile sind nicht sichtbar (undefiniert). Was fehlt mir, damit ich auf mFile und mName zugreifen kann?
configuration.cpp

Code: Select all

#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

Code: Select all

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

Code: Select all

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)
}
}
Die obigen Codeausgaben

Code: Select all

QVariant(Configuration::AmbientLoopConfiguration, )
undefined

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post