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);
}
我有一个非常简单的树数据结构:
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);
}