QML TableView'da dizini verilen satır yüksekliğini değiştirmek için basit bir yol var mı?QML TableView Öğesi satırlarını dinamik olarak ve ayrı ayrı değiştirme
Sorun şu ki dinamik olarak veri yüklerim TableView'ın modeli. Qt RichText HTML etiketlerini (ul, li) kullanarak uyarıların listesini görüntülemek istediğim bir "uyarı" sütunum var. Ancak, bu liste onu içeren hücreden daha yüksektir ve y-taşması vardır.
QTableView sınıfı, setRowHeight (int satır, int yükseklik), resizeRowToContents (int satır) veya resizeRowsToContents() gibi bu sorunu çözmek için birçok yönteme sahiptir.
Ama QML eşdeğer kolayca satırı yeniden boyutlandırmak için bu tür yöntemleri yok gibi görünüyor ...
rowDelegate benim sorunu çözmek olabilir ama satırlara ait yükseklikleri değiştirmek için nasıl kullanılacağını bilmiyorum ayrı ayrı (Ben onun endeksi) demek.
Herkes aynı sorunu yaşıyor mu ve çözmek için bana bir numara verebilir mi?
Benim TableView: my TableView güncelleme
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
}
JS işlevi:
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;
}
}
}
childrenRect.height kullanın ama işe yaramadı. Üçlü operatörünü de kullanmaya çalıştım. ListElements içinde "rowHeight" adlı bir özellik ekledim ve bunu delegede kullanıyorum. Çalışıyor ancak listemde 14.000'den fazla öğe olduğu için şimdi bir performans sorunum var. Neyse cevabın için teşekkür ederim – Mario