Alterar o modelo não redesenho de objectos de software livre, por vezes,

0

Pergunta

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

O problema é que, com uma certa mudança no modelo de (o sinal buttonParametersChanged é enviada), ou seja, se o número de objetos foi igual a uma vez e após a atualização há é também um objeto, mas com características diferentes, não redesenhando toma lugar, o antigo botão permanece. Além disso, de alguma forma, depende o tempo de execução. Também, se eu remover a linha com a cor, o modelo de atualização.

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

Melhor resposta

0

O problema é que buttonParametersChanged é um sinal que dispara na atribuição de um novo recipiente (QList<>) para buttonParameters. Ele não disparar sobre alterações no conteúdo de um existente QList<> atribuído a essa propriedade.

No entanto, você pode sempre disparar manualmente buttonParametersChanged quando você sabe que você tenha modificado o conteúdo da QList<>, que deve dar o efeito que você deseja.

Nota, um software livre ListModel ou C++ equivalente provavelmente seria mais apropriado para este caso de uso. Muitos QML componentes são projetados especificamente para integrar com eles e lidar com os casos de recipiente de conteúdo mudar.

2021-11-16 14:26:45

Que é a coisa, eu chamo de sinal buttonParametersChanged manualmente, e em determinadas situações não funciona
Narina

Eu gostaria de adicionar um onButtonParametersChanged manipulador que fizer algo, então você pode certificar-se de que o sinal é realmente atirando, quando você acha que ele é.
David K. Hess

O sinal é definitivamente demitido, eu verifiquei.
Narina

Fornecer um mínimo reproduzível exemplo, neste caso,
GrecKo

Em outros idiomas

Esta página está em outros idiomas

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