kav*_*ero 5 treeview qt qml qt5.5
我正在尝试使用Qml Qt 5.5创建正确的Treeview.我成功地拥有了一个全局根的Treeview.但无法找到如何为行项添加子项.
目前我有类似的东西:
TreeView {
id:listTree
anchors.fill: parent
anchors.leftMargin: 1
headerVisible: false
backgroundVisible: false
selection: ItemSelectionModel {
model: myModel
}
TableViewColumn {
role: "name"
}
itemDelegate: Item {
Text {
anchors.verticalCenter: parent.verticalCenter
color: styleData.textColor
elide: styleData.elideMode
text: styleData.value
}
}
Component.onCompleted: {
model.append({"name":"Never"})
model.append({"name":"gonna"})
model.append({"name":"give"})
model.append({"name":"you"})
model.append({"name":"up"})
model.append({"name":"Never"})
model.append({"name":"gonna"})
model.append({"name":"let"})
model.append({"name":"you"})
model.append({"name":"dow"})
}
}
Run Code Online (Sandbox Code Playgroud)
我想要这样的事情:
我该怎么做 ?
小智 5
您还可以创建一个 TreeModel 类来扩展QStandardItemModel和覆盖roleNames(),就像这里所做的那样。要将子节点添加到树中的节点,只需使用appendRow().
TreeModel::TreeModel(QObject *parent) : QStandardItemModel(parent)
{
QStandardItem *root = new QStandardItem("root");
QStandardItem *child = new QStandardItem("child");
this->appendRow(root);
root->appendRow(child);
}
Run Code Online (Sandbox Code Playgroud)
您的模型没有任何父子关系,这就是它显示为列表的原因。
您将希望您的“TreeModel”成为 TreeItems 的集合。每个 TreeItem 将了解其自己的子项和父项。
您可以按照此处找到的完全实现的 Qt 示例进行操作:http://doc.qt.io/qt-5/qtwidgets-itemviews-simpletreemodel-example.html。您需要(在 C++ 中)为 TreeItem 创建一个类,并为您的 TreeModel 创建一个单独的类。
该示例是工作代码,您只需复制并粘贴它即可获得 TreeView 的工作模型。
您将特别感兴趣的部分是该方法的实现setupModelData()。在这里,您需要解析 80 年代歌词的精彩数据集,并为每个歌词分配一个 TreeItem。
每个 TreeItem(每行数据一个)应在创建时(在其构造函数中)了解其父级。然后,一旦它的孩子被创建,就调用parentTreeItem.appendChild(childTreeItem)
当你的模型完成后,你可以通过几种方式将它分配给你的qml视图,我更喜欢用qmlRegisterType注册它(http://doc.qt.io/qt-5/qqmlengine.html#qmlRegisterType)
注册后,可以在 qml 中创建它,就好像它是 ListView 或任何其他 qml 对象一样。
注意:您将拥有此 rootItem。这是视图无法使用的东西,但所有“第一个缩进”父项都是 rootItem 的子项。
祝你好运!
您能否提供一个代码片段,说明哪一行导致您无法为 QAbstractItemModel 创建快捷方式?
| 归档时间: |
|
| 查看次数: |
7445 次 |
| 最近记录: |