QListView - 如何显示子项目

QListView - how show child items

我有一个非常简单的树数据结构:

A、B、C为一些向量,其元素分别为A0-A3、B0-B1、C0-C2

现在,我试图在 QListView(我们称之为 listview1)中显示元素 A、B 和 C,并在另一个 QFileView(listview2)中显示在 listview1 中选择的元素的子元素。

我有:

我想要的:

到目前为止,这是我的代码:

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) {

    ui->setupUi(this);

    model = new QStandardItemModel(this);

    QStandardItem *collection1 = new QStandardItem(QString("A"));
    model->invisibleRootItem()->appendRow(collection1);
    for (int i = 0; i < 4; ++i) {
        QStandardItem *item = new QStandardItem(QString("A %0").arg(i));
        collection1->appendRow(item);
    }

    QStandardItem *collection2 = new QStandardItem(QString("B"));
    model->invisibleRootItem()->appendRow(collection2);
    for (int i = 0; i < 2; ++i) {
        QStandardItem *item = new QStandardItem(QString("B %0").arg(i));
        collection2->appendRow(item);
    }

    QStandardItem *collection3 = new QStandardItem(QString("C"));
    model->invisibleRootItem()->appendRow(collection3);
    for (int i = 0; i < 3; ++i) {
        QStandardItem *item = new QStandardItem(QString("C %0").arg(i));
        collection3->appendRow(item);
    }

    ui->listView->setModel(model);
    ui->listView_2->setModel(model);
    ui->treeView->setModel(model);

    }

    void MainWindow::on_listView_activated(const QModelIndex &index) {

    QStandardItem* item = model->itemFromIndex(index);
    QStandardItem* childItem = item->child(0);

    qDebug() << item << "index" << index << childItem;

    if (childItem != nullptr) {
        ui->treeView->setCurrentIndex(childItem->index());
    }

    //ui->listView->setModelColumn(1);

}

有人有什么想法吗?

您必须使用setRootIndex()方法:

void MainWindow::on_listView_activated(const QModelIndex &index) {
    ui->listView_2->setRootIndex(index);
}