Reputation: 104
I have a very simple tree data structure:
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:
What I want:
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
Reputation: 244301
You must use the setRootIndex()
method:
void MainWindow::on_listView_activated(const QModelIndex &index) {
ui->listView_2->setRootIndex(index);
}
Upvotes: 2