Source code

Revision control

Copy as Markdown

// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
/*
model.cpp
A simple model that uses a QStringList as its data source.
*/
#include "model.h"
/*!
Returns the number of items in the string list as the number of rows
in the model.
*/
//! [0]
int StringListModel::rowCount(const QModelIndex &parent) const
{
return stringList.count();
}
//! [0]
#if 0
// This represents a read-only version of data(), an early stage in the
// development of the example leading to an editable StringListModel.
/*!
Returns an appropriate value for the requested data.
If the view requests an invalid index, an invalid variant is returned.
Any valid index that corresponds to a string in the list causes that
string to be returned.
*/
//! [1-data-read-only]
QVariant StringListModel::data(const QModelIndex &index, int role) const
{
if (!index.isValid())
return QVariant();
if (index.row() >= stringList.size())
return QVariant();
if (role == Qt::DisplayRole)
return stringList.at(index.row());
else
return QVariant();
}
//! [1-data-read-only]
#endif
/*!
Returns an appropriate value for the requested data.
If the view requests an invalid index, an invalid variant is returned.
Any valid index that corresponds to a string in the list causes that
string to be returned.
*/
//! [1]
QVariant StringListModel::data(const QModelIndex &index, int role) const
{
if (!index.isValid())
return QVariant();
if (index.row() >= stringList.size())
return QVariant();
if (role == Qt::DisplayRole || role == Qt::EditRole)
return stringList.at(index.row());
else
return QVariant();
}
//! [1]
/*!
Returns the appropriate header string depending on the orientation of
the header and the section. If anything other than the display role is
requested, we return an invalid variant.
*/
//! [2]
QVariant StringListModel::headerData(int section, Qt::Orientation orientation,
int role) const
{
if (role != Qt::DisplayRole)
return QVariant();
if (orientation == Qt::Horizontal)
return QStringLiteral("Column %1").arg(section);
else
return QStringLiteral("Row %1").arg(section);
}
//! [2]
/*!
Returns an appropriate value for the item's flags. Valid items are
enabled, selectable, and editable.
*/
//! [3]
Qt::ItemFlags StringListModel::flags(const QModelIndex &index) const
{
if (!index.isValid())
return Qt::ItemIsEnabled;
return QAbstractItemModel::flags(index) | Qt::ItemIsEditable;
}
//! [3]
/*!
Changes an item in the string list, but only if the following conditions
are met:
* The index supplied is valid.
* The index corresponds to an item to be shown in a view.
* The role associated with editing text is specified.
The dataChanged() signal is emitted if the item is changed.
*/
//! [4]
bool StringListModel::setData(const QModelIndex &index,
const QVariant &value, int role)
{
if (index.isValid() && role == Qt::EditRole) {
stringList.replace(index.row(), value.toString());
emit dataChanged(index, index, {role});
return true;
}
//! [4] //! [5]
return false;
}
//! [5]
/*!
Inserts a number of rows into the model at the specified position.
*/
//! [6]
bool StringListModel::insertRows(int position, int rows, const QModelIndex &parent)
{
beginInsertRows(QModelIndex(), position, position+rows-1);
for (int row = 0; row < rows; ++row) {
stringList.insert(position, "");
}
endInsertRows();
return true;
//! [6] //! [7]
}
//! [7]
/*!
Removes a number of rows from the model at the specified position.
*/
//! [8]
bool StringListModel::removeRows(int position, int rows, const QModelIndex &parent)
{
beginRemoveRows(QModelIndex(), position, position+rows-1);
for (int row = 0; row < rows; ++row) {
stringList.removeAt(position);
}
endRemoveRows();
return true;
//! [8] //! [9]
}
//! [9]