-
Bug
-
Resolution: Unresolved
-
P2: Important
-
None
-
6.6.2
-
None
I'm trying to use TableView with HorizontalHeaderView.
What is expected: both views should sync columns' width according to their data. I.e. column width = max(header_column_width, max_delegate_column_width).
For now one can only choose between these two values.
Example #1 (syncView: tableView):
ColumnLayout
{
anchors.fill: parent HorizontalHeaderView {
id: horizontalHeader
model: ["checked 00000", "amount 00000", "fruit type 00000", "fruit name 00000", "fruit price 00000"]
syncView: tableView
clip: true
Layout.fillWidth: true
} TableView {
id: tableView columnSpacing: 1
rowSpacing: 1
boundsBehavior: Flickable.StopAtBounds
clip: true syncDirection: Qt.Horizontal
//syncView: horizontalHeader Layout.fillHeight: true
Layout.fillWidth: true model: TableModel {
TableModelColumn { display: "checked" }
TableModelColumn { display: "amount" }
TableModelColumn { display: "fruitType" }
TableModelColumn { display: "fruitName" }
TableModelColumn { display: "fruitPrice" } rows: [
{
checked: false,
amount: 1,
fruitType: "Apple",
fruitName: "Granny Smith",
fruitPrice: 1.50
},
{
checked: true,
amount: 4,
fruitType: "Orange",
fruitName: "Navel",
fruitPrice: 2.50
},
{
checked: false,
amount: 1,
fruitType: "Banana",
fruitName: "Cavendish",
fruitPrice: 3.50
}
]
}
delegate: Label {
text: model.display
padding: 12
}
}
}
Result:

Example #2 (syncView: horizontalHeader):
ColumnLayout
{
anchors.fill: parent HorizontalHeaderView {
id: horizontalHeader
model: ["checked 00000", "amount 00000", "fruit type 00000", "fruit name 00000", "fruit price 00000"]
//syncView: tableView
clip: true
Layout.fillWidth: true
} TableView {
id: tableView columnSpacing: 1
rowSpacing: 1
boundsBehavior: Flickable.StopAtBounds
clip: true syncDirection: Qt.Horizontal
syncView: horizontalHeader Layout.fillHeight: true
Layout.fillWidth: true model: TableModel {
TableModelColumn { display: "checked" }
TableModelColumn { display: "amount" }
TableModelColumn { display: "fruitType" }
TableModelColumn { display: "fruitName" }
TableModelColumn { display: "fruitPrice" } rows: [
{
checked: false,
amount: 1,
fruitType: "Apple",
fruitName: "Granny Smith",
fruitPrice: 1.50
},
{
checked: true,
amount: 4,
fruitType: "Orange",
fruitName: "Navel",
fruitPrice: 2.50
},
{
checked: false,
amount: 1,
fruitType: "Banana",
fruitName: "Cavendish",
fruitPrice: 3.50
}
]
}
delegate: Label {
text: model.display
padding: 12
}
}
}

Example #3 (syncView: horizontalHeader + a model with bigger texts):
ColumnLayout
{
anchors.fill: parent HorizontalHeaderView {
id: horizontalHeader
model: ["checked", "amount", "fruit type", "fruit name", "fruit price"]
//syncView: tableView
clip: true
Layout.fillWidth: true
} TableView {
id: tableView columnSpacing: 1
rowSpacing: 1
boundsBehavior: Flickable.StopAtBounds
clip: true syncDirection: Qt.Horizontal
syncView: horizontalHeader Layout.fillHeight: true
Layout.fillWidth: true model: TableModel {
TableModelColumn { display: "checked" }
TableModelColumn { display: "amount" }
TableModelColumn { display: "fruitType" }
TableModelColumn { display: "fruitName" }
TableModelColumn { display: "fruitPrice" } rows: [
{
checked: false,
amount: 1,
fruitType: "Apple",
fruitName: "Granny Smith 00000",
fruitPrice: 1.50
},
{
checked: true,
amount: 4,
fruitType: "Orange",
fruitName: "Navel",
fruitPrice: 2.50
},
{
checked: false,
amount: 1,
fruitType: "Banana",
fruitName: "Cavendish",
fruitPrice: 3.50
}
]
}
delegate: Label {
text: model.display
padding: 12
}
}
}

So, there is no universal way to resize columns properly on different models data.