如何让qml TableView行高动态适应内容

Posted

技术标签:

【中文标题】如何让qml TableView行高动态适应内容【英文标题】:How to make qml TableView row height dynamically adapt to content 【发布时间】:2018-10-31 11:32:38 【问题描述】:

问题如下:

如果文本的长度大于单元格的宽度,则文本被换行,但行高不增加。显示剩余的文本被切掉。我的另一个问题是,如何使每个单元格的高度适应其中包含的文本?

这是 QML 部分:

Window 
id: window
visible: true
width: 440
height: 400
title: qsTr("Table test")

ListModel 
    id: stringsModel

    ListElement 
        ID: 0
        String: 'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam'
    
    ListElement 
        ID: 1
        String: 'This is a test string'
    ListElement 
        ID: 1
        String: 'This is another test string'
    


TableView 
    anchors.fill: parent
    frameVisible: false
    model: stringsModel

    TableViewColumn  role: "ID"; title: "ID"; width: window.width / 2 
    TableViewColumn  role: "String"; title: "String"; width: window.width / 2; delegate: stringDelegate;

    Component 
        id: stringDelegate
        Item 
            id: stringItem
            Text 
                id: stringTxt
                width: parent.width
                text: styleData.value
                wrapMode: TextEdit.WordWrap
            
        
    

【问题讨论】:

【参考方案1】:

您的委托的根项目应定义其implicitHeight 属性。 像这样的:

Component 
    id: stringDelegate
    Item 
        id: stringItem
        implicitHeight: stringTxt.paintedHeight
        Text 
            id: stringTxt
            width: parent.width
            text: styleData.value
            wrapMode: TextEdit.WordWrap
        
    

【讨论】:

在委托中尝试上述解决方案 --> 无效的属性分配:“implicitHeight”是只读属性 Qt doc says 一些组件将implicitHeight 定义为只读。确保您不要使用其中之一。

以上是关于如何让qml TableView行高动态适应内容的主要内容,如果未能解决你的问题,请参考以下文章

如何使 tableview 行高取决于其内容

根据内容动态调整tableview单元格的高度 - iOS Swift

如何计算 tableView 行高并将值传递给 heightForRowAtIndexPath

tableView计算动态行高的总结

不使用 AutoLayout 的 UITableView 动态行高

qt中QTableWidget怎么根据内容自动调整列宽行高?