NoobNoob
NoobNoob

Reputation: 104

QListView - how show child items

I have a very simple tree data structure:

enter image description here

A, B and C are some vectors, whose elements are respectively A0-A3, B0-B1 and C0-C2.

Now, I'm trying to show in a QListView (let's call it listview1) the elements A B and C, and in another QFileView (listview2) the child elements of the element selected in listview1.

What I have:

enter image description here

What I want:

enter image description here

Here there is my code so far:

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);

}

Does someone have some ideas?

Upvotes: 1

Views: 559

Answers (1)

eyllanesc
eyllanesc

Reputation: 244301

You must use the setRootIndex() method:

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

Upvotes: 2

Related Questions