在空值上检测到绑定循环

时间:2018-09-15 19:28:22

标签: qt qml

由于某种原因,当TextField为空值时,出现此错误:

QML Binding: Binding loop detected for property "value"

仅当该值为空时才会发生,如果我键入一些内容,错误就会消失。

此字段用于捕获整数,但是由于TextField不管理整数输入,因此我必须通过称为dp的代理属性将其转换(从字符串到int):

    TextField {
        id: fld_decimal_places
    }
    Binding { target: aewm_obj.preferences; property: "dp_str"; value: fld_decimal_places.text }
    Binding { target: fld_decimal_places; property: "text"; value:  aewm_obj.preferences.dp_str }

属性dp_str的设置器具有以下代码:

Q_PROPERTY(int decimal_places READ get_decimal_places WRITE set_decimal_places NOTIFY decimal_places_changed)
Q_PROPERTY(QString dp_str READ get_dp_str WRITE set_dp_str NOTIFY dp_str_changed)
void Prefs::set_dp_str(QString p_dp_str) {
    int dp=0;
    if (p_dp_str.size()>0) {
        dp=p_dp_str.toInt();
    }
    qDebug() << "setting dp_str << " << p_dp_str << " to "<<dp << " integer value";
    if (this->decimal_places!=dp) {
        this->set_decimal_places(dp);
        qDebug() << "emitting dp_str_changed "  << p_dp_str;
        emit dp_str_changed(QString("%1").arg(dp));
    }
}

在控制台上,当TextField变为空时,我看到了这一点:

setting dp_str <<  ""  to  0  integer value
set_decimal_places() to  0
emitting dp_str_changed  ""
get_dp_str() returning  "0"
qrc:/Preferences.qml:95:5: QML Binding: Binding loop detected for property "value"

其他方法的定义如下:

QString Prefs::get_dp_str() {
    qDebug() << "get_dp_str() returning " << QString("%1").arg(this->decimal_places);
    return QString("%1").arg(this->decimal_places);
}
void Prefs::set_decimal_places(int p_decimal_places) {
    if (this->decimal_places!=p_decimal_places) {
        this->decimal_places=p_decimal_places;
        this->settings->setValue("decimal_places",this->decimal_places);
        qDebug() << "set_decimal_places() to " << p_decimal_places;
        emit decimal_places_changed(this->decimal_places);        
    }
}

这里可能是什么问题?

0 个答案:

没有答案