Zmiana modelu czasami nie ponownie rysuje obiekty w QML

0

Pytanie

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

Problem w tym, że przy określonej zmianie modelu (wysyłany jest sygnał buttonParametersChanged), a mianowicie, jeśli liczba obiektów była równa jednostce i po aktualizacji także pozostaje jeden obiekt, ale z innymi cechami, odrysowywanie się nie dzieje, stara przycisk pozostaje. Co więcej, to zależy od w czasie wykonywania. Ponadto, jeśli usunę linię z kolorem, model zostanie zaktualizowany.

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

Najlepsza odpowiedź

0

Problem w tym, że buttonParametersChanged-to sygnał, który wyzwala w sprawie mianowania nowego pojemnika (QList<>) dla buttonParameters. To nie prowadzi do zmian w zawartości istniejącej listy QList<> przypisany do tej właściwości.

Tym nie mniej, zawsze możesz ręcznie uruchomić zmiana ustawień przycisków, gdy wiesz, że zmieniły zawartość listy QList<>, co powinno dać pożądany efekt.

Należy pamiętać, że odpowiednik modelu listy QML lub C++, prawdopodobnie będzie bardziej odpowiednie dla tego zastosowania. Wiele elementów QML zaprojektowane specjalnie dla integracji z nimi i traktowania przypadków zmiany zawartości kontenerów.

2021-11-16 14:26:45

W tym rzecz, że ja nazywam sygnałowe wybierz przyciskustawienia zmienione ręcznie, a w niektórych sytuacjach to nie działa
Narina

Ja bym dodał obsługi onButtonParametersChanged, który coś rejestruje, aby można było upewnić się, że sygnał naprawdę działa, kiedy myślisz, że to prawda.
David K. Hess

Sygnał na pewno działa, sprawdziłem.
Narina

Podaj minimalny odtwarzany przykład w tym przypadku
GrecKo

W innych językach

Ta strona jest w innych językach

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