我正在尝试在QQuickWidget中加载一些QML表单,并不断获取:QML GroupBox: Binding loop detected for property "implicitWidth"
简化的QML是:
import QtQuick 2.4
import QtQuick.Controls 1.2
GroupBox {
id: root
title: qsTr("1")
Column {
id: column1
width: parent.width
ComboBox {
id: cbComboBox
width: parent.width
currentIndex: 0
editable: false
}
GroupBox {
id: groupBox
title: "test"
width: parent.width //the problem
Label {
text:"1"
width: parent.width
}
}
}
}
由于某些原因,我无法将parent.width
或cbComboBox.width
用于groupBox。 root.width
可以工作,但是范围太广。我缺少什么?我需要嵌套的GroupBox具有最大宽度(带有间距)。
答案 0 :(得分:0)
根据Qt GroupBox QML Type documentation
GroupBox的隐式大小是根据其内容的大小计算的。
这意味着GroupBox将自动使用其子级的大小来计算自己的大小。 在您的情况下,唯一的子项是Column,其宽度等于GroupBox的宽度。我认为这就是造成绑定循环的原因。
如果按@eyllanesc设置列的宽度,绑定循环将消失。
我宁愿在QML部分中定义GroupBox的隐式宽度(默认情况下为宽度)。在我的示例中,隐式宽度为100px,但可以通过子级(ComboBox,其他GroupBox等)的宽度来计算。
// MyGroupBox.qml
import QtQuick 2.4
import QtQuick.Window 2.2
import QtQuick.Controls 1.2
GroupBox {
title: qsTr("1")
implicitWidth: 100
Column {
id: column1
width: parent.width
ComboBox {
id: cbComboBox
currentIndex: 0
editable: false
width: parent.width
}
GroupBox {
id: groupBox
title: "test"
width: parent.width
Label {
text: "1"
}
}
}
}
通过更改根对象的宽度,可以直接从C ++根据您的项目设置实际宽度。
// main.cpp
#include <QtQuickWidgets/QQuickWidget>
#include <QQuickItem>
#include <QtWidgets>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QQuickWidget *view = new QQuickWidget;
view->setSource(QUrl::fromLocalFile("://MyGroupBox.qml"));
view->rootObject()->setWidth(800);
view->show();
return app.exec();
}