Cambiando il modello non ridisegnare gli oggetti in QML a volte

0

Domanda

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

Il problema è che, con un certo cambiamento nel modello (il segnale buttonParametersChanged viene inviata), vale a dire, se il numero di oggetti è uguale a uno e dopo l'aggiornamento non c' è anche un oggetto, ma con caratteristiche diverse, non ridisegno ha luogo, il vecchio pulsante rimane. Inoltre, in qualche modo, dipende il runtime. Inoltre, se si rimuove il linea con il colore, il modello di aggiornamento.

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

Migliore risposta

0

Il problema è che buttonParametersChanged è un segnale che attiva la cessione di un nuovo contenitore (QList<>) per buttonParameters. Non innescare le modifiche al contenuto di un esistente QList<> assegnato alla proprietà.

Tuttavia, è sempre possibile attivare manualmente buttonParametersChanged quando sai di aver modificato il contenuto del QList<>, che dovrebbe dare l'effetto desiderato.

Nota, un QML ListModel o C++ equivalente probabilmente sarebbe più appropriato per questo caso d'uso. Molti QML componenti sono progettati specificatamente per integrarsi con loro e gestire i casi di contenitore contenuto cambia.

2021-11-16 14:26:45

Che è la cosa, che io chiamo il segnale buttonParametersChanged manualmente, e in certe situazioni non funziona
Narina

Mi piacerebbe aggiungere un onButtonParametersChanged gestore che registra qualcosa in modo che è possibile assicurarsi che il segnale è davvero di cottura quando si pensa che è.
David K. Hess

Il segnale è sicuramente licenziato, ho controllato.
Narina

Fornire una minima riproducibile esempio in questo caso
GrecKo

In altre lingue

Questa pagina è in altre lingue

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