Cambiar el modelo no renegociación de los objetos en QML a veces

0

Pregunta

            Repeater {
                model: myModel.buttonParameters
                delegate: Button
                {
                    width: 47
                    height:  47
                    contentItem: Text {
                        id: content
                        text: modelData.name
                        font.family: MyStyle.fontFamily
                        fontSizeMode: Text.Fit
                        font.pixelSize: 30
                        font.styleName: "Bold"
                        topPadding: height / 6
                        color: modelData.visibility ? MyStyle.colorFromSeriesName(this.text) : MyStyle.dividerColor
                        horizontalAlignment: Text.AlignHCenter
                        verticalAlignment: Text.AlignVCenter
                    }

                    background: Rectangle
                    {
                        anchors.fill: parent
                        radius: 4
                        color: MyStyle.backgroundColor
                        border.color:MyStyle.dividerColor
                        border.width: 2
                    }

                    onClicked: {
                        cntModel.visibilityOfChartChanged(modelData.name, "plot");
                    }
                }
            }
            
            On the C++ side.
            myModel.buttonParameters is a QList<MyModel*> , where MyModel is a class inherited from QObject.
            
           Q_PROPERTY(QVariant buttonParameters READ buttonParametersList NOTIFY buttonParametersChanged)

           QVariant buttonParametersList()
          {
             return QVariant::fromValue(m_buttonParametersList );
          }
           

El problema es que, con un cierto cambio en el modelo de (la señal de buttonParametersChanged se envía), es decir, si el número de objetos es igual a uno y después de la actualización no es también un objeto, pero con características diferentes, no volver a dibujar se lleva a cabo, el viejo botón permanece. Por otra parte, que de alguna manera depende de el tiempo de ejecución. También, si se me quite la línea con el color, el modelo de actualización.

c++ qml repeater
2021-11-16 13:19:09
1

Mejor respuesta

0

El problema es que buttonParametersChanged es una señal que se activa en la asignación de un nuevo contenedor (QList<>) para buttonParameters. No desencadenar sobre los cambios en el contenido de un QList<> asignado a la propiedad.

Sin embargo, siempre se puede activar manualmente buttonParametersChanged cuando usted sabe que usted ha modificado el contenido de la QList<> que debe dar el efecto que desea.

Nota, un QML ListModel o equivalente de C++ podría ser más apropiado para este caso de uso. Muchos QML componentes están diseñados específicamente para integrarse con ellos y tratar los casos de contenedor de contenidos cambiantes.

2021-11-16 14:26:45

Esa es la cosa, yo llame a la señal de buttonParametersChanged manualmente, y en ciertas situaciones no funciona
Narina

Me gustaría añadir un onButtonParametersChanged controlador que registra algo así que usted puede asegurarse de que la señal es realmente disparando cuando usted piensa que es.
David K. Hess

La señal es definitivamente despedido, he comprobado.
Narina

Proporcionar un mínimo reproducible ejemplo en este caso
GrecKo

En otros idiomas

Esta página está en otros idiomas

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Slovenský
..................................................................................................................