Modeli değiştirmek bazen Qml'deki nesneleri yeniden çizmez

0

Soru

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

Sorun şu ki, modelde belirli bir değişiklikle (buttonParametersChanged sinyali gönderilir), yani, nesne sayısı bire eşitse ve güncellemeden sonra orada aynı zamanda bir nesnedir, ancak farklı özelliklere sahip, yeniden çizim yok gerçekleşir, eski düğme kalır. Dahası, bir şekilde aşağıdakilere bağlıdır çalışma. Ayrıca, çizgiyi renkle kaldırırsam, model güncellenir.

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

En iyi cevabı

0

Sorun, buttonParametersChanged, buttonparameters'a yeni bir kapsayıcı (QList<>) atandığında tetiklenen bir sinyal olmasıdır. Bu özelliğe atanan varolan bir QList<> öğesinin içeriğindeki değişiklikleri tetiklemez.

Ancak, istediğiniz efekti vermesi gereken QList<> içeriğini değiştirdiğinizi bildiğinizde buttonParametersChanged öğesini her zaman el ile tetikleyebilirsiniz.

Not, bir QML ListModel veya C ++ eşdeğeri büyük olasılıkla bu kullanım durumu için daha uygun olacaktır. Birçok QML bileşeni, bunlarla özel olarak bütünleşmek ve kapsayıcı içeriğinin değiştiği durumları ele almak üzere tasarlanmıştır.

2021-11-16 14:26:45

Mesele şu ki, sinyal düğmesini çağırıYorumparamEtreler manuel olarak değiştirildi ve bazı durumlarda işe yaramıyor
Narina

Bir şeyi günlüğe kaydeden bir onButtonParametersChanged işleyicisi eklerdim, böylece sinyalin gerçekten olduğunu düşündüğünüzde ateşlendiğinden emin olabilirsiniz.
David K. Hess

Sinyal kesinlikle ateşlendi, kontrol ettim.
Narina

Bu durumda en az tekrarlanabilir bir örnek sağlayın
GrecKo

Diğer dillerde

Bu sayfa diğer dillerde

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