Změny modelu není překreslení objektů v QML někdy

0

Otázka

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

Problém je, že s určitou změnu v modelu (signál buttonParametersChanged je odeslána), a to, pokud počet objektů byl roven jedné a po aktualizaci tam je také jeden objekt, ale s různými vlastnostmi, žádné překreslování koná, staré tlačítko zůstane. Kromě toho, že to nějak závisí na runtime. Také, pokud jsem odstranit řádek s barvou, model se bude aktualizovat.

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

Nejlepší odpověď

0

Problém je, že buttonParametersChanged je signál, který spouští na přidělení nové nádoby (QList<>) buttonParameters. To není spoušť na změny obsahu stávající QList<> přiřazené k tomuto majetku.

Nicméně, vždy můžete ručně spustit buttonParametersChanged, když víš, že jsi upravený obsah QList<>, která by měla dát efekt, který chcete.

Všimněte si, QML ListModel nebo C++ ekvivalent by pravděpodobně bylo vhodnější pro tento případ použití. Mnoho QML komponenty jsou navrženy tak, aby specificky integrovat se s nimi a zpracovávat případy nádoby, obsah se mění.

2021-11-16 14:26:45

To je věc, zavolám signál buttonParametersChanged ručně, a v určitých situacích to nefunguje
Narina

Já bych přidat onButtonParametersChanged handler, který se přihlásí na něco, takže si můžete ujistěte se, že signál je opravdu palba, když si myslíte, že to je.
David K. Hess

Signál je určitě vypálil, zkontroloval jsem to.
Narina

Poskytnout minimální reprodukovatelné například v tomto případě
GrecKo

V jiných jazycích

Tato stránka je v jiných jazycích

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