Zmena modelu nie je prekresliť objekty v PROGRAM niekedy

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 zmenou v modeli (signál buttonParametersChanged sa odošle), a to, ak počet objektov bola rovná jednej a po aktualizácii tam je tiež jeden objekt, ale s rôznymi charakteristikami, č prekresľovaný koná, staré tlačidlo zostáva. Okrem toho nejako závisí od v režime runtime. Tiež, ak by som odstrániť riadok s farbe, model bude aktualizovať.

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

Najlepšiu odpoveď

0

Problém je, že buttonParametersChanged je signál, ktorý aktivuje o postúpení nový kontajner (QList<>), ak sa buttonParameters. To nie je spúšť na zmeny obsahu existujúcej QList<> pridelené, že majetok.

Avšak, vždy sa môžete manuálne spustenie buttonParametersChanged, keď viete, že ste zmenili obsah QList<>, ktorý by vám mal vplyv chcete.

Poznámky, PROGRAM ListModel alebo C++ ekvivalent pravdepodobne by byť viac vhodný pre tento prípad použitia. Mnohé POŽIADAVKY komponenty sú navrhnuté špecificky integrovať s nimi a rukoväť prípadoch obsah obalu, zmena.

2021-11-16 14:26:45

To je vec, pozývam signál buttonParametersChanged manuálne, a v niektorých situáciách to nefunguje
Narina

Ja by som pridať onButtonParametersChanged obslužný program, ktorý sa prihlási niečo, aby ste mali istotu, že signál je naozaj streľby, keď si myslíte, že je.
David K. Hess

Signál je určite vystrelil, som skontroloval.
Narina

Poskytujú minimálne reprodukovateľné príklad v tomto prípade
GrecKo

V iných jazykoch

Táto stránka je v iných jazykoch

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