Qt Quick 2 中 TableViewColumn 的 TableView 替换

Posted

技术标签:

【中文标题】Qt Quick 2 中 TableViewColumn 的 TableView 替换【英文标题】:TableView replacement for TableViewColumn in Qt Quick 2 【发布时间】:2020-10-17 13:56:47 【问题描述】:

在 Qt Quick Controls 1 中,我们可以使用 TableViewColumn 设置模型中不同列的样式:

TableView 

    anchors.fill: parent

    TableViewColumn title: "1"; role: "one"; width: 70 
    TableViewColumn title: "2"; role: "two"; width: 70   
    TableViewColumn title: "3"; role: "three"; width: 70 

    model: theModel


如果TableView 没有更多的TableViewColumn,我们如何在 Qt Quick 2 中获得类似的结果?

【问题讨论】:

【参考方案1】:

从 Qt 5.12 开始,您可以使用 TableView QML 类型。 但是要拥有您想要的一切,您需要包含Qt.labs.qmlmodels。这一切都在 Qt 5.15 中可用(使用online installer)。

实际实施几乎不取决于您的要求,但这里有一个如何完成的示例。

假设您将使用TableView 以 JSON 格式显示您拥有的一些数据。在这种情况下,TableModel 将是一个完美的选择,因为它设计用于处理 javascript/JSON 数据,其中每一行都是一个简单的密钥对对象,而无需在 C++ 中创建自定义的 QAbstractTableModel 子类。

您需要使用TableModelColumn 声明模型中需要包含哪些列,例如:TableModelColumn display: "checked"

要将真实数据加载到模型中,请使用其rows 属性;数据应该是行数组的形式,例如:

rows: [
        // Each property is one cell/column.
        
          checked: false,
          amount: 1,
          type: "Apple",
          price: 1.50
        ,
        
          checked: true,
          amount: 4,
          type: "Orange",
          price: 2.50
        ,
        ...
      ]
这里最有趣的部分是委托的应用——这里是DelegateChooser,因为它允许视图对模型中不同类型的项目使用不同的委托。所以在这里你几乎可以做任何事情来调整你的细胞。例如:您可以使用ProgressBar 组件作为单元格的代表:
DelegateChoice 
  column: 1
  delegate: ProgressBar 
    enabled: false
    width: 100
    from: 0.0
    to: 10.0
    value: model.display
  

因此,您可以轻松地完全在 QML 中获取此应用程序(需要使用 C++ 和/或旧的 QtQuick.Controls):

请参考this repository获取完整申请。

【讨论】:

感谢您的出色回答。我发现DelegateChooser 正是我想要的。

以上是关于Qt Quick 2 中 TableViewColumn 的 TableView 替换的主要内容,如果未能解决你的问题,请参考以下文章

Qt5 和 Qt Quick 2 中的自定义实时绘图

第一课:QT Quick项目架构说明

Qt Quick Controls 2 启动画面

Qt Quick 2 应用程序中的非本机对话框

QT quick基础QML学习2

由于找不到qt5quick.dll,无法继续执行代码。重新安装程序可能会解决此问题,不知道怎么解决跪求大神帮忙