QML TableView:检测到属性“ __scrollBarTopMargin”的绑定循环

时间:2019-10-21 16:34:44

标签: qt qml

我只是想在QML文件中创建一个TableView,就像这样-

TableView {
        id: resultListTableView
        anchors.fill: parent
        rowDelegate: Rectangle {
            color: "#D3D3D3"
            height: 30
        }

        itemDelegate: Rectangle {
            width: 100
            height: 50
            border.color: "#000000"
            border.width: 1
            Text {
                id: textItem
                text: styleData.value
                anchors.fill: parent
                verticalAlignment: Text.AlignVCenter
                horizontalAlignment: Text.AlignHCenter
                elide: Text.ElideRight
            }
        }

        headerDelegate: Rectangle {
            height: textItem.implicitHeight * 1.2
            width: textItem.implicitWidth
            color: "lightsteelblue"
            Text {
                id: textItem
                anchors.centerIn: parent
                text: styleData.value
                elide: Text.ElideRight
            }
        }

        TableViewColumn {
            role: "file"
            title: "File"
            width: resultListTableView.viewport.width * 0.3
            movable: false
            resizable: false
        }
        TableViewColumn {
            role: "type"
            title: "Type"
            width: resultListTableView.viewport.width * 0.2
            movable: false
            resizable: false
        }
        TableViewColumn {
            role: "size"
            title: "Size"
            width: resultListTableView.viewport.width * 0.2
            movable: false
            resizable: false
        }
        TableViewColumn {
            role: "path"
            title: "Path"
            width: resultListTableView.viewport.width * 0.3
            movable: false
            resizable: false
        }

        model: ResultListDataModel {}
        onDoubleClicked: {
            const element = model.get(row)
            console.log("Downloading file ", element.file, "of size", element.size)
        }
    }

此组件是TabView的一部分,当单击相应的选项卡时显示。但是,当单击选项卡时,我会随机收到一个绑定循环警告:

QML TableView: Binding loop detected for property "__scrollBarTopMargin"

我没有做任何可能导致此绑定循环的事情,所以我想知道问题出在哪里。有人知道这是怎么回事吗?

1 个答案:

答案 0 :(得分:1)

在没有Qt开发人员环境的情况下进行纯粹的推测,但是我想视口取决于列的宽度,而列的宽度现在取决于视口。

缺少设置列宽度的四行将证明或否定真正的快。

如果这种疯狂的猜测不起作用,那么从这里的来源https://github.com/qt-creator/qt-creator/blob/master/tests/auto/qml/codemodel/importscheck/005_compositeQmlCopyAndCpp/QtQuick/Controls/TableView.qml,我会看到__scrollBarTopMargin: (__style && __style.transientScrollBars || Qt.platform.os === "osx") ? headerrow.height : 0

您可以考虑修改标头委托,以查看是否删除了警告。

哦,哇,那个ID重复很微妙。正如您自己说的那样,似乎重复的ID会使您的大小混乱。希望这是您收到的第一个警告,而不是您实际上收到的疯狂警告。