Schimbarea model nu aspira obiecte în QML uneori

0

Problema

            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 );
          }
           

Problema este că, cu o anumită schimbare în modelul de (semnalul buttonParametersChanged este trimis), și anume, dacă numărul de obiecte a fost egal cu unul și, după actualizarea acolo este, de asemenea, un obiect, dar cu caracteristici diferite, nu retrasarea are loc, butonul vechi rămâne. Mai mult decât atât, aceasta depinde într-un fel pe la runtime. De asemenea, dacă am elimina conformitate cu culoarea, modelul va actualiza.

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

Cel mai bun răspuns

0

Problema este că buttonParametersChanged este un semnal care declanșează privind atribuirea unui nou container (QList<>) pentru a buttonParameters. Nu declanșa modificări la conținutul unei existente QList<> atribuite la această proprietate.

Cu toate acestea, puteți declanșa manual buttonParametersChanged când știi că ai modificat conținutul QList<> care ar trebui să vă dea efectul dorit.

Rețineți, o QML ListModel sau C++ echivalent ar fi probabil mai potrivit pentru acest caz de utilizare. Multe QML componentele sunt special conceput pentru a se integra cu ei și să se ocupe de cazurile de container conținutul schimbare.

2021-11-16 14:26:45

Asta e chestia, eu numesc semnal buttonParametersChanged manual, și în anumite situații în care nu funcționează
Narina

Aș adăuga un onButtonParametersChanged handler care jurnalele ceva astfel încât să puteți asigurați-vă că semnalul este într-adevăr de ardere atunci când crezi că este.
David K. Hess

Semnalul este cu siguranta concediat, am verificat.
Narina

Oferi un minim reproductibile exemplu în acest caz
GrecKo

În alte limbi

Această pagină este în alte limbi

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