Qt 分别动态更改QML TableView元素行高度
在QML表格视图中,有没有一种简单的方法来修改给定索引的行高 我的问题是,我动态加载的数据是TableView的模型。我有一个“警告”列,我想在其中显示使用Qt RichText HTML标记(ul,li)的警告列表。但是,此列表高于包含它的单元格,并且存在y溢出 QTableView类有许多方法来解决此问题,例如setRowHeight(int-row,int-height)、resizeRowToContents(int-row)或resizeRowToContents() 但似乎QML等价物没有这样的方法来轻松调整行的大小 rowDelegate可能会解决我的问题,但我不知道如何使用它分别修改行的高度(我的意思是给定其索引) 有没有人有同样的问题,可以给我一个解决它的窍门 我的桌面视图:Qt 分别动态更改QML TableView元素行高度,qt,qml,tableview,Qt,Qml,Tableview,在QML表格视图中,有没有一种简单的方法来修改给定索引的行高 我的问题是,我动态加载的数据是TableView的模型。我有一个“警告”列,我想在其中显示使用Qt RichText HTML标记(ul,li)的警告列表。但是,此列表高于包含它的单元格,并且存在y溢出 QTableView类有许多方法来解决此问题,例如setRowHeight(int-row,int-height)、resizeRowToContents(int-row)或resizeRowToContents() 但似乎QML等价
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
}
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;
}
}
}
更新我的TableView的JS函数:
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
}
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;
}
}
}
函数displayingparsingstatus(){
对于(var i=0;i您已经在设置QML委托元素的高度:
height: parent.height
它将高度绑定到父高度。
如果使用表达式设置高度,则每次更改表达式的任何元素时都会触发(并重新计算)
这就是为什么QML属性有一个通知信号
因此,如果要将高度绑定到其他元素,只需将其指定给height属性
我还没试过,但你要找的可能是childrenRect:
也可以使用三元运算符为属性赋值,即:
height: (model.get(styleData.row)[styleData.role] === 0)?30:100
我尝试使用childrenRect.height,但它不起作用。我还尝试使用三元运算符。我在ListElements中添加了一个名为“rowHeight”的属性,并在委托中使用它。它起作用,但我现在遇到了性能问题,因为我的列表中有14000多个元素。无论如何,感谢您的回答