Qt Quick 2 中 TableViewColumn 的 TableView 替换
TableView replacement for TableViewColumn in Qt Quick 2
在 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 中实现类似的结果?
从 Qt 5.12 开始,您可以使用 TableView
QML 类型。
但要拥有您想要的一切,您需要包括 Qt.labs.qmlmodels
。这一切都在 Qt 5.15 中可用(使用 online installer)。
实际实施几乎不会取决于您的要求,但这里有一个如何完成的示例。
假设您要使用 TableView
来显示一些 JSON 格式的数据。在这种情况下,TableModel
将是一个完美的选择,因为它设计用于处理 JavaScript/JSON 数据,其中每一行都是一个简单的 key-pair 对象无需在 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
, since it allows a view to use different delegates for different types of items in the model. So here you can do almost everything to tweak your cells. E.g.: you can use ProgressBar
组件作为单元格的委托:
DelegateChoice {
column: 1
delegate: ProgressBar {
enabled: false
width: 100
from: 0.0
to: 10.0
value: model.display
}
}
因此,您可以轻松地完全在 QML 中获得此应用程序(whiteout 需要使用 C++ and/or 旧 QtQuick.Controls):
请参阅this repository以获得完整的应用程序。
在 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 中实现类似的结果?
从 Qt 5.12 开始,您可以使用 TableView
QML 类型。
但要拥有您想要的一切,您需要包括 Qt.labs.qmlmodels
。这一切都在 Qt 5.15 中可用(使用 online installer)。
实际实施几乎不会取决于您的要求,但这里有一个如何完成的示例。
假设您要使用
TableView
来显示一些 JSON 格式的数据。在这种情况下,TableModel
将是一个完美的选择,因为它设计用于处理 JavaScript/JSON 数据,其中每一行都是一个简单的 key-pair 对象无需在 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
, since it allows a view to use different delegates for different types of items in the model. So here you can do almost everything to tweak your cells. E.g.: you can useProgressBar
组件作为单元格的委托:
DelegateChoice {
column: 1
delegate: ProgressBar {
enabled: false
width: 100
from: 0.0
to: 10.0
value: model.display
}
}
因此,您可以轻松地完全在 QML 中获得此应用程序(whiteout 需要使用 C++ and/or 旧 QtQuick.Controls):
请参阅this repository以获得完整的应用程序。