QML TableView: Обнаружен цикл привязки для свойства "__scrollBarTopMargin" - PullRequest
1 голос
/ 21 октября 2019

Я просто пытаюсь создать TableView в своем файле QML, например, так:

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 Ответ

1 голос
/ 21 октября 2019

Чистая спекуляция без удобной среды разработки 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.

Вы могли бы рассмотреть возможность взлома вашего делегата заголовка, чтобы посмотреть, удаляет ли это предупреждение.

Ого, это дублирование идентификатора было тонким. Как вы сказали сами, кажется, что дублированный идентификатор перепутан с вашим размером. Жаль, что это было первое предупреждение, которое ты получил, а не сумасшедшее, которое ты получил на самом деле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...