Documentation: Fix "Using Model Indexes" in Model View Programming guide to work
The code introduced by 54d5ca0c27
did not work since the variables parentIndex/numRows
were local to the lambda and the outer code would not wait.
Move the widgets population into the lambda to fix this.
Modernize the remaining code a bit.
Pick-to: 6.4 6.3 6.2
Change-Id: I2a09878987df9edb9ff04f0ac4ad82af1a8b52c8
Reviewed-by: Paul Wicking <paul.wicking@qt.io>
This commit is contained in:
parent
b7812bbbb6
commit
c49bf9fe27
@ -7,55 +7,61 @@
|
||||
A simple example of how to access items from an existing model.
|
||||
*/
|
||||
|
||||
#include <QtGui>
|
||||
#include <QApplication>
|
||||
#include <QLabel>
|
||||
#include <QVBoxLayout>
|
||||
#include <QWidget>
|
||||
|
||||
#include <QFileSystemModel>
|
||||
#include <QPalette>
|
||||
|
||||
#include <QDir>
|
||||
#include <QModelIndex>
|
||||
|
||||
/*!
|
||||
Create a default directory model and, using the index-based interface to
|
||||
the model and some QLabel widgets, populate the window's layout with the
|
||||
names of objects in the directory.
|
||||
|
||||
Note that we only want to read the filenames in the highest level of the
|
||||
directory, so we supply a default (invalid) QModelIndex to the model in
|
||||
order to indicate that we want top-level items.
|
||||
*/
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
QApplication app(argc, argv);
|
||||
|
||||
QWidget *window = new QWidget;
|
||||
QVBoxLayout *layout = new QVBoxLayout(window);
|
||||
QLabel *title = new QLabel("Some items from the directory model", window);
|
||||
QWidget window;
|
||||
auto *layout = new QVBoxLayout(&window);
|
||||
auto *title = new QLabel("Some items from the directory model", &window);
|
||||
title->setBackgroundRole(QPalette::Base);
|
||||
title->setMargin(8);
|
||||
layout->addWidget(title);
|
||||
|
||||
//! [0]
|
||||
QFileSystemModel *model = new QFileSystemModel;
|
||||
connect(model, &QFileSystemModel::directoryLoaded, [model](const QString &directory) {
|
||||
auto *model = new QFileSystemModel;
|
||||
|
||||
auto onDirectoryLoaded = [model, layout, &window](const QString &directory) {
|
||||
QModelIndex parentIndex = model->index(directory);
|
||||
int numRows = model->rowCount(parentIndex);
|
||||
});
|
||||
model->setRootPath(QDir::currentPath);
|
||||
const int numRows = model->rowCount(parentIndex);
|
||||
//! [1]
|
||||
for (int row = 0; row < numRows; ++row) {
|
||||
QModelIndex index = model->index(row, 0, parentIndex);
|
||||
//! [1]
|
||||
|
||||
//! [2]
|
||||
QString text = model->data(index, Qt::DisplayRole).toString();
|
||||
//! [2]
|
||||
// Display the text in a widget.
|
||||
auto *label = new QLabel(text, &window);
|
||||
layout->addWidget(label);
|
||||
//! [3]
|
||||
}
|
||||
//! [3]
|
||||
};
|
||||
|
||||
QObject::connect(model, &QFileSystemModel::directoryLoaded, onDirectoryLoaded);
|
||||
model->setRootPath(QDir::currentPath());
|
||||
//! [0]
|
||||
|
||||
//! [1]
|
||||
for (int row = 0; row < numRows; ++row) {
|
||||
QModelIndex index = model->index(row, 0, parentIndex);
|
||||
//! [1]
|
||||
|
||||
//! [2]
|
||||
QString text = model->data(index, Qt::DisplayRole).toString();
|
||||
// Display the text in a widget.
|
||||
//! [2]
|
||||
|
||||
QLabel *label = new QLabel(text, window);
|
||||
layout->addWidget(label);
|
||||
//! [3]
|
||||
}
|
||||
//! [3]
|
||||
|
||||
window->setWindowTitle("A simple model example");
|
||||
window->show();
|
||||
window.setWindowTitle("A simple model example");
|
||||
window.show();
|
||||
return app.exec();
|
||||
}
|
||||
|
@ -449,11 +449,13 @@
|
||||
\snippet simplemodel-use/main.cpp 0
|
||||
|
||||
In this case, we start by setting up a default QFileSystemModel. We connect
|
||||
it to a lambda, in which we will obtain a parent index using a specific
|
||||
its signal \c directoryLoaded(QString) to a lambda, in which we will
|
||||
obtain a parent index for the directory using a specific
|
||||
implementation of \l{QFileSystemModel::}{index()} provided by that model.
|
||||
In the lambda, we count the number of rows in the model using the
|
||||
\l{QFileSystemModel::}{rowCount()} function. Finally, we set the root path
|
||||
of the QFileSystemModel so it starts loading data and triggers the lambda.
|
||||
|
||||
In the lambda, we determine the number of rows in the model using the
|
||||
\l{QFileSystemModel::}{rowCount()} function.
|
||||
|
||||
|
||||
For simplicity, we are only interested in the items in the first column
|
||||
of the model. We examine each row in turn, obtaining a model index for
|
||||
@ -474,6 +476,9 @@
|
||||
\codeline
|
||||
\snippet simplemodel-use/main.cpp 3
|
||||
|
||||
Finally, we set the root path of the QFileSystemModel so it starts
|
||||
loading data and triggers the lambda.
|
||||
|
||||
The above example demonstrates the basic principles used to retrieve
|
||||
data from a model:
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user