我有4个列的tableview。当我放大主窗口的宽度时,我也需要放大第一列宽度。
旧路(非QML)是:
QTableView->horizontalHeader()->setSectionResizeMode(0, QHeaderView::Stretch );
现在我做了类似下面的例子,但这并不完美。
当我将来添加新列时(忘记重写此代码行)或动态添加一些列时,这也会停止工作。
TableView { id:ccPanel model:ccModel
TableViewColumn {
id: ccName
role: "name"
title: "Name"
width: ccPanel.width - ccSize.width - ccDate.width
}
TableViewColumn {
id: ccSize
role: "size"
title: "Size"
width: 60
}
TableViewColumn {
id: ccDate
role: "Date"
title: "Datum"
width: 85
}
}
你知道如何帮助我吗?
答案 0 :(得分:3)
要消除奇怪的大小调整,请手动调整最后一列不可调整大小,并使用列的widthChanged
信号以及TabView的信号。以下代码产生的行为非常接近Qt TableView标头。
TableView
{
id: ccPanel
model: ccModel
anchors.fill: parent
onWidthChanged:ccName.width = Math.max(100, ccPanel.width - ccSize.width - ccDate.width)
TableViewColumn
{
id: ccName
role: "name"
title: "Name"
onWidthChanged: ccDate.width = Math.max(60, ccPanel.width - ccSize.width - ccName.width)
}
TableViewColumn
{
id: ccSize
role: "size"
title: "Size"
width: 60
onWidthChanged: ccDate.width = Math.max(85, ccPanel.width - ccSize.width - ccName.width)
}
TableViewColumn
{
resizable: false
id: ccDate
role: "Date"
title: "Datum"
width: 85
}
}
答案 1 :(得分:0)
嗯,有一个我能想到的解决方案,但它并不漂亮:
基本上,您必须进行手动列管理,跟踪数组中的所有当前列,每次添加,删除或调整列的大小时,必须执行一个动态生成列宽的绑定的函数:
column.height = Qt.binding(function() { return property_evaluating_expressions })
答案 2 :(得分:0)
如果我的话,我们在这里。在这个时候,它并不完美,但它的解决方案。我响应调整主窗口大小的事件。不完美,因为不包含实际的NAME大小。有时在将名称jups放大到非理性的新值时。
TableView
{
id: ccPanel
property var oldWidth: ccPanel.width
model: ccModel
onWidthChanged:
{
var newWidth = ccName.width + (ccPanel.oldWidth - ccName.width - ccDate.width - ccSize.width);
if(newWidth > 19)
{
ccName.width = newWidth
}
ccPanel.oldWidth = ccPanel.width;
}
TableViewColumn
{
...
...
...