es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Asignaciones de nombres de propiedad dinámicos dentro de un delegado

Estoy tratando de incluir un objeto de Configuración dentro del delegado de un Repetidor para así poder guardar el valor de un Cuadro de giros. Sin embargo, no puedo determinar cómo establecer dinámicamente el nombre del alias de propiedad.

Lo que quiero lograr es que el nombre del alias de propiedad sea el mismo que el modelData. Por ejemplo, para item1: “property alias item1: box.value”; para item2: “property alias item2: box.value”, etc.

Columna {
Repetidor {
modelo: [“item1”, “item2”, “item3”, “item4”, “item5”]
delegado: RowLayout {
Configuración {
fileName: “configuración”
category: modelData
property alias value: box.value
}
Etiqueta {
text: modelData
}
CuadroDeGiros {
id: box
}
}
}
}

El código anterior genera la siguiente configuración y es una solución temporal a lo que quería hacer:

[item1]
value=””
[item2]
value=””
[item3]
value=””

Lo que quiero es una categoría única con los valores, como se muestra a continuación:

[categoría]
item1=””
item2=””
item3=””

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Desafortunadamente, no es posible establecer dinámicamente el nombre de alias de una propiedad en QML. Los alias de propiedades deben definirse en tiempo de compilación y no pueden generarse dinámicamente en tiempo de ejecución.

    Sin embargo, existe un enfoque alternativo que puede tomar para lograr lo que desea. En lugar de usar un objeto Configuración en el delegado, puede crear un único objeto Configuración en el nivel principal y usarlo para almacenar todos los valores.

    Aquí hay un ejemplo que muestra cómo se puede hacer esto:

    import QtQuick 2.0
    import QtQuick.Controls 2.0
    
    Columna {
        id: root
        Configuración {
            id: configuración
            fileName: "config"
        }
        Repetidor {
            modelo: ["item1", "item2", "item3", "item4", "item5"]
            delegado: RowLayout {
                Etiqueta {
                    text: modelData
                }
                SpinBox {
                    id: box
                    value: configuración.value(modelData)
                    onValueChanged: {
                        configuración.setValue(modelData, box.value)
                    }
                }
            }
        }
    }
    

    En este ejemplo, creamos un único objeto Configuración en el nivel principal con un fileName de “config”. Luego usamos este objeto en el delegado del Repetidor para almacenar y recuperar los valores de los SpinBoxes.

    Los SpinBoxes usan la propiedad value para recuperar el valor del objeto Configuración, y la señal onValueChanged para almacenar el valor de vuelta en el objeto Configuración.

    Al usar la propiedad modelData como clave para los valores en el objeto Configuración, cada SpinBox guardará su valor bajo una clave diferente según su índice en el modelo.

    Este enfoque dará como resultado una única categoría en el archivo de configuración con todos los valores almacenados bajo claves separadas.

Comments are closed.