在QML TableView中有一个简单的方法来修改行高吗?
我的问题是我动态加载数据是TableView的模型。我有一个"警告"我想在列中显示使用Qt RichText HTML标记(ul,li)的警告列表。但是,此列表高于包含它的单元格,并且存在y溢出。
QTableView类有很多方法可以解决这个问题,比如setRowHeight(int row,int height),resizeRowToContents(int row)或resizeRowsToContents()。
但似乎QML等价物没有这样的方法来轻松调整行的大小......
rowDelegate可能会解决我的问题,但我不知道如何使用它来修改行'单独的高度(我的意思是给它的索引)。
有没有人遇到同样的问题并且可以给我一个解决它的技巧?
我的TableView:
ListModel {
id: filesList
ListElement {
name:""
dir:""
type:""
status""
}
}
TableView {
id: filesTable
TableViewColumn {
id:nameColumn
role: "name"
title: "Name"
width: dropFiles.width*.2
}
TableViewColumn {
id:dirColumn
role: "dir"
title: "Path"
width: dropFiles.width*.8
}
TableViewColumn {
id:typeColumn
visible: false;
role: "type"
title: "Type"
width: dropFiles.width*.2
}
TableViewColumn {
id:statusColumn
visible: false;
role: "status"
title: "Status"
width: dropFiles.width*.3
}
rowDelegate: Rectangle {
anchors {
left: parent.left
right: parent.right
verticalCenter: parent.verticalCenter
}
height: parent.height
MouseArea {
anchors.fill: parent
acceptedButtons: Qt.RightButton
onClicked: {
if (mouse.button == Qt.RightButton)
{
if(styleData.selected){
rowContextMenu.popup();
}
else {
filesTable.selection.deselect(0, filesTable.rowCount-1);
filesTable.selection.select(styleData.row);
rowContextMenu.popup();
}
}
}
}
}
anchors.fill: parent
selectionMode: SelectionMode.ExtendedSelection
model: filesList
}
更新我的TableView的JS函数:
function displayParsingStatus(){
for(var i= 0; i<newModel.files.length; ++i){
switch(newModel.files[i].status){
case 0:
filesList.get(i).status="<font color=\"green\">Success</font>";
break;
case 1:
var status ="";
status += "<ul>";
for(var j=0; j < newModel.files[i].warnings.length;j++){
status += "<li><font color=\"orange\">Warning: " + newModel.files[i].warnings[j] + "</font></li>";
}
status += "</ul>";
filesList.get(i).status=status;
break;
case 2:
filesList.get(i).status="<font color=\"red\"><b>Error: " + newModel.files[i].error + "</b></font>";
break;
case 3:
filesList.get(i).status="Ignored";
break;
}
}
}
答案 0 :(得分:2)
您已经在QML委托元素上设置了高度:
height: parent.height
它将高度绑定到父高度。 如果使用表达式设置高度,则每次表达式的任何元素发生更改时,都会触发(并重新评估)。
这就是QML属性有NOTIFY信号的原因。
因此,如果要将高度绑定到其他元素,只需将其指定给height属性。
我没有尝试过,但是孩子们可能正是你们所寻找的:http://doc.qt.io/qt-5/qml-qtquick-item.html#childrenRect.height-prop
您还可以使用三元运算符为属性赋值,即:
height: (model.get(styleData.row)[styleData.role] === 0)?30:100