如何正确更改TableView的行高?

时间:2014-08-27 08:47:31

标签: qt qml qtableview qt-quick

Window {
    id: uninstallWindow
    width: 640
    height: 480

    property variant pluginData;

    TableView {
        id:_pluginTable
        anchors.right: parent.right
        anchors.rightMargin: 0
        anchors.left: parent.left
        anchors.leftMargin: 0
        anchors.bottom: parent.bottom
        anchors.bottomMargin: 43
        anchors.top: parent.top
        anchors.topMargin: 0
        model: pluginData

        itemDelegate: Text {
            text: modelData
            font.pixelSize: 24
        }

        TableViewColumn {

        }
    }
}

这需要几个小时才能实现这一目标,我觉得这应该是一个相对简单的操作,为什么这么难?正如您所看到的,我更改了表中项目的字体大小,因为它们在默认情况下太小了。这只会导致它们被不变的行大小剪切掉。我试过了

  1. 设置rowDelegate对象(但这会导致丢失默认情况下的所有其他样式信息,如背景,选择颜色等,否则我不知道如何指定它)

  2. 基于QAbstractListModel / QAbstractTableModel设置自定义模型对象(由于某些原因只有Qt知道,“数据”函数从未被调用过......)

  3. 设置自定义项委托(似乎不再从此对象控制高度)

  4. 我需要跳过什么环才能让行改变它们​​的大小?

3 个答案:

答案 0 :(得分:4)

正如Asker已经写过的那样,使用rowDelegate可以实现自定义行高,但这会丢弃默认样式。可以使用SystemPalette恢复默认样式。

rowDelegate: Rectangle {
   height: 30
   SystemPalette {
      id: myPalette;
      colorGroup: SystemPalette.Active
   }
   color: {
      var baseColor = styleData.alternate?myPalette.alternateBase:myPalette.base
      return styleData.selected?myPalette.highlight:baseColor
   }
}

这将恢复行的默认背景颜色(包括在需要时交替显示行颜色)和所选行的颜色,这似乎就是所需要的。

答案 1 :(得分:1)

以下在Qt 5.10中对我来说就像是一种魅力:

rowDelegate: Item { height: 30 }

我在itemDelegate(以及headerDelegate)中执行实际样式(字体/颜色)并按TableViewColumn提供内容(包含和不包含自己的代表)。

答案 2 :(得分:0)

要更改行高,您需要使用rowDelegate。例如:

rowDelegate: Rectangle{
width: childrenRect.width
height: 40
}

要更改tableview高度,您可以使用Layout.preferredHeight。例如:

Layout.preferredHeight: 300