2014-08-27 130 views
2
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 { 

     } 
    } 
} 

为了达到这个目标需要花费我几个小时,我觉得这应该是一个相对简单的操作,那为什么这么难?正如你所看到的,我改变了表中项目的字体大小,因为它们默认太小了。这只是导致它们被不变的行大小剪裁。我试过如何正确更改TableView的行高?

  1. 设置一个rowDelegate对象(但是这会导致所有其他样式信息的损失是有默认像背景,选择颜色等,我不知道如何另行指定的话)

  2. 设置基于QAbstractListModel/QAbstractTableModel一个自定义的模型对象(由于某种原因,只知道Qt的,“数据”功能是从来没有所谓的...)

  3. 设置自定义项目委托(似乎高度不再由此物体控制)

我需要跳过哪些环节才能让行更改大小?

+0

带锚的八条线可以被这两个替换:anchors.fill:parent; anchors.bottomMargin:43(边距默认为0)。 – pepan 2016-04-19 12:38:16

回答

0

你有试过吗?

void QTableView::setRowHeight(int row, int height) 

功能似乎正是你想要的吗?

编辑:

或者你也可以使用头文件来设置行/列

verticalHeader()->setDefaultSectionSize(int size) 
+0

那么唯一的方法就是放入C++中?没有办法从QML指定全局行高?写一个全新的C++部分只是为了改变这个小东西似乎是一种痛苦。 – borrrden 2014-08-27 09:20:20

+0

Dam抱歉,没有真正阅读过这个问题,我看到了Qt并认为C++! – AngryDuck 2014-08-27 10:14:39

0

的大小要改变你需要使用rowDelegate行高度。例如:

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

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

Layout.preferredHeight: 300 
3

由于提问者已经写,自定义行高度可利用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 
    } 
} 

这将恢复的行(包括当需要时交替行颜色)的缺省背景颜色和选定行的颜色,这似乎是所有需要。