'QML wrapped TableView element behaves different from non-wrapped one

I'm having some troubles getting the QML type TableView to behave correctly when wrapping it inside another item. The problem is that creating a reuseable type basically forces one to use an Item wrapper to have the *HeaderView types in the same .qml file. Here is the rather simple code, a test-model for some data can be taken from the official TableView documentation.

import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import TableModel

Window {  
    width: 600
    height: 480
    visible: true

    // This item wrapper changes TableView behavior
    Item {
        width: 600
        height: 250
    // --------------------------------------------

        TableView {
            id: tableView
            anchors.fill: parent
            topMargin: horizontalHeader.implicitHeight
            leftMargin: verticalHeader.implicitWidth
            columnSpacing: 1
            rowSpacing: 1
            clip: true

            model: TableModel {}

            delegate: Rectangle {
                implicitWidth: 150
                implicitHeight: 25
                Text {
                    text: display
                }
            }
        }

        HorizontalHeaderView {
            id: horizontalHeader
            syncView: tableView
        }

        VerticalHeaderView {
            id: verticalHeader
            syncView: tableView
        }
    // --------------------------------------------
    }
    // --------------------------------------------
}

Without the Item wrapper (see comments in code) my TableView looks as expected: TableView without Item wrapper

But once wrapped inside an Item the horizontal and vertical headers get placed over the actual table. TableView with Item wrapper

For some odd reason this displacement is only relevant for the very first rendering of the table. Once I drag the data from the table around a little (I guess activating the "Flickable" inherited type?) the data suddenly snaps into position and is displayed correctly outside of the headers.



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source