QML Treeview:如何获取孩子的QModelIndex

时间:2018-09-10 15:49:40

标签: c++ qt qml qt5 qstandarditemmodel

我有一个带有TreeView的QML QStandardItemModel,并使用ItemSelectionModel来管理选择。 ItemSelectionModel的{​​{1}}函数需要一个QModelIndex。在我看来如何获得select个孩子?

树看起来像这样:

  • 文件1
    • 任务1
    • 任务2
  • 文件2
    • 任务1

我想在单击task2时选择它(在委托中可以有一个MouseArea)(以便TreeView突出显示它),并且为此,我必须用{来调用QModelIndex任务2的{1}},但我不知道 不知道如何获取task2的QModelIndex。

ItemSelectionModel.select源自QModelIndex,因此提供了索引功能:

QStandardItemModel

但是要使用此功能,我需要知道父级的索引。我如何从视图中获取它?

1 个答案:

答案 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();
}

enter image description here

更新

要获取所按项目的索引,必须使用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