El módulo más pequeño — propiedades y elementos
Módulo de ejemplo: hello.
El modelo de datos de un módulo es una jerarquía de dos niveles:
- una propiedad (
PropertyMulti) — un grupo con nombre, con una etiqueta, un permiso, una posición en el árbol de visualización; - que contiene uno o varios elementos (
ElementBasey sus derivados:ElementBool,ElementString,ElementInt…) — cada uno un valor tipado individual.
Es una diferencia importante respecto a INDI, donde un “vector” (el equivalente de una propiedad) solo contiene elementos de un único tipo. Una propiedad OST puede mezclar los tipos libremente — ver El catálogo de tipos.
Declarar una propiedad en JSON
{
"p":{
"hello": {
"label": "Hello",
"permission": 0,
"devcat": "",
"group": "",
"order": "1",
"hasprofile": false,
"e": {
"message": {
"type": "string",
"label": "Message",
"order": "1",
"value": "Hello, world!"
}
}
}
}
}permission:0= solo lectura,1= solo escritura (nunca usado en la práctica — ver más abajo),2= lectura/escritura.devcat/group: posición en el árbol de visualización del lado del cliente — primer nivel y subnivel. Dejados vacíos aquí, una sola propiedad no necesita ninguna agrupación. Ver Actualizaciones del lado del servidor para su uso concreto, y Crear propiedades dinámicamente para la trampa de nomenclatura entre JSON y C++.hasprofile: si esta propiedad puede guardarse/cargarse como perfil nombrado — ver Los perfiles.e: los elementos de la propiedad, por clave. Cada elemento tiene como mínimotype,label,order.
El constructor del módulo no tiene nada más que hacer que cargar este archivo:
Hello::Hello(QString name, QString label, QString profile, QVariantMap availableModuleLibs)
: Basemodule(name, label, profile, availableModuleLibs)
{
Q_INIT_RESOURCE(hello);
loadOstPropertiesFromFile(":hello.json");
}Y como esta propiedad es de solo lectura y el módulo no tiene ninguna acción que procesar, Hello no necesita sobrecargar ningún método: la implementación por defecto (vacía) de onExternalEvent() es suficiente.
permission:1 (solo escritura) existe en la enumeración pero no tiene ningún uso real en el framework — ningún módulo del core lo utiliza. Ignore este valor.