我有一个带有TreeView
的QML QStandardItemModel
,并使用ItemSelectionModel
来管理选择。 ItemSelectionModel
的{{1}}函数需要一个QModelIndex
。在我看来如何获得select
个孩子?
树看起来像这样:
我想在单击task2时选择它(在委托中可以有一个MouseArea)(以便TreeView突出显示它),并且为此,我必须用{来调用QModelIndex
任务2的{1}},但我不知道
不知道如何获取task2的QModelIndex。
ItemSelectionModel.select
源自QModelIndex
,因此提供了索引功能:
QStandardItemModel
但是要使用此功能,我需要知道父级的索引。我如何从视图中获取它?
答案 0 :(得分:1)
要获取孩子,您必须首先拥有父母,因此,在您的计划中,您必须获取“ file1” ,为此,您必须获取其父母,并且该父母是{{ rootIndex
中的1}},因此顺序为:TreeView
。
main.cpp
rootIndex -> file1 -> task1
main.qml
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QQmlContext>
#include <QStandardItemModel>
int main(int argc, char *argv[])
{
QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
QGuiApplication app(argc, argv);
QStandardItemModel model;
QStandardItem *item1 = new QStandardItem("file1");
item1->appendRows({new QStandardItem("task1"), new QStandardItem("task2")});
QStandardItem *item2 = new QStandardItem("file2");
item2->appendRows({new QStandardItem("task1")});
model.appendRow(item1);
model.appendRow(item2);
QQmlApplicationEngine engine;
engine.rootContext()->setContextProperty("tree_model", &model);
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
if (engine.rootObjects().isEmpty())
return -1;
return app.exec();
}
更新:
要获取所按项目的索引,必须使用import QtQuick 2.9
import QtQuick.Window 2.2
import QtQuick.Controls 1.4
import QtQml.Models 2.11
Window {
visible: true
width: 640
height: 480
TreeView {
id: treeView
anchors.fill: parent
model: tree_model
selectionMode: SelectionMode.MultiSelection
selection: ItemSelectionModel {
id: ism
model: tree_model
}
TableViewColumn {
title: "Name"
role: "display"
width: 300
}
Component.onCompleted: {
expandAll()
var ix1 = tree_model.index(0, 0, treeView.rootIndex)
var ix = tree_model.index(0, 0, ix1)
ism.select(ix, ItemSelectionModel.Select)
}
}
// https://forum.qt.io/topic/75395/qml-treeview-expand-method-not-working
function expandAll() {
for(var i=0; i < tree_model.rowCount(); i++) {
var index = tree_model.index(i,0)
if(!treeView.isExpanded(index)) {
treeView.expand(index)
}
}
}
}
:
styleData.index