由于某种原因,当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);
}
}
这里可能是什么问题?