Невозможно получить доступ ко всем членам класса в QVariantList из QML.C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Невозможно получить доступ ко всем членам класса в QVariantList из QML.

Сообщение Anonymous »

У меня есть файл QML, в котором я пытаюсь прочитать QVariantList, который содержит структуру 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»