Lomiri
Loading...
Searching...
No Matches
QVariantListModel Class Reference

The QVariantListModel class provides a model that supplies variants to views. More...

Inherits QAbstractListModel.

Public Member Functions

 QVariantListModel (QObject *parent=0)
 
 QVariantListModel (const QVariantList &list, QObject *parent=0)
 
int rowCount (const QModelIndex &parent=QModelIndex()) const override
 
QModelIndex sibling (int row, int column, const QModelIndex &idx) const override
 
QVariant data (const QModelIndex &index, int role) const override
 
bool setData (const QModelIndex &index, const QVariant &value, int role=Qt::EditRole) override
 
bool insertRows (int row, int count, const QModelIndex &parent=QModelIndex()) override
 
bool removeRows (int row, int count, const QModelIndex &parent=QModelIndex()) override
 
QVariantList variantList () const
 
void setVariantList (const QVariantList &list)
 

Detailed Description

The QVariantListModel class provides a model that supplies variants to views.

QVariantListModel is an editable model that can be used for simple cases where you need to display a number of variants in a view.

The model provides all the standard functions of an editable model, representing the data in the variant list as a model with one column and a number of rows equal to the number of items in the list.

Model indexes corresponding to items are obtained with the \l{QAbstractListModel::index()}{index()} function. Item data is read with the data() function and written with setData(). The number of rows (and number of items in the variant list) can be found with the rowCount() function.

The model can be constructed with an existing variant list, or variants can be set later with the setVariantList() convenience function. Variants can also be inserted in the usual way with the insertRows() function, and removed with removeRows(). The contents of the variant list can be retrieved with the variantList() convenience function.

See also
QAbstractListModel, QAbstractItemModel, {Model Classes}

Definition at line 48 of file qvariantlistmodel.h.

Constructor & Destructor Documentation

◆ QVariantListModel() [1/2]

QVariantListModel::QVariantListModel ( QObject *  parent = 0)
explicit

Constructs a variant list model with the given parent.

Definition at line 87 of file qvariantlistmodel.cpp.

87 :
88 QAbstractListModel(parent)
89{
90 QHash<int, QByteArray> roles(roleNames());
91 roles[Qt::DisplayRole] = "modelData";
92 setRoleNames(roles);
93}

◆ QVariantListModel() [2/2]

QVariantListModel::QVariantListModel ( const QVariantList &  list,
QObject *  parent = 0 
)
explicit

Constructs a variant list model containing the specified list with the given parent.

Definition at line 100 of file qvariantlistmodel.cpp.

100 :
101 QAbstractListModel(parent), lst(list)
102{
103 QHash<int, QByteArray> roles(roleNames());
104 roles[Qt::DisplayRole] = "modelData";
105 setRoleNames(roles);
106}

◆ ~QVariantListModel()

QVariantListModel::~QVariantListModel ( )

Definition at line 108 of file qvariantlistmodel.cpp.

108 {
109}

Member Function Documentation

◆ data()

QVariant QVariantListModel::data ( const QModelIndex &  index,
int  role 
) const
override

Returns data for the specified role, from the item with the given index.

If the view requests an invalid index, an invalid variant is returned.

See also
setData()

Definition at line 151 of file qvariantlistmodel.cpp.

152{
153 if (index.row() < 0 || index.row() >= lst.size())
154 return QVariant();
155
156 if (role == Qt::DisplayRole || role == Qt::EditRole)
157 return lst.at(index.row());
158
159 return QVariant();
160}

◆ insertRows()

bool QVariantListModel::insertRows ( int  row,
int  count,
const QModelIndex &  parent = QModelIndex() 
)
override

Inserts count rows into the model, beginning at the given row.

The parent index of the rows is optional and is only used for consistency with QAbstractItemModel. By default, a null index is specified, indicating that the rows are inserted in the top level of the model.

See also
QAbstractItemModel::insertRows()

Definition at line 195 of file qvariantlistmodel.cpp.

197{
198 if (count < 1 || row < 0 || row > rowCount(parent))
199 return false;
200
201 beginInsertRows(QModelIndex(), row, row + count - 1);
202
203 for (int r = 0; r < count; ++r)
204 lst.insert(row, QVariant());
205
206 endInsertRows();
207
208 return true;
209}
int rowCount(const QModelIndex &parent=QModelIndex()) const override

◆ removeRows()

bool QVariantListModel::removeRows ( int  row,
int  count,
const QModelIndex &  parent = QModelIndex() 
)
override

Removes count rows from the model, beginning at the given row.

The parent index of the rows is optional and is only used for consistency with QAbstractItemModel. By default, a null index is specified, indicating that the rows are removed in the top level of the model.

See also
QAbstractItemModel::removeRows()

Definition at line 222 of file qvariantlistmodel.cpp.

224{
225 if (count <= 0 || row < 0 || (row + count) > rowCount(parent))
226 return false;
227
228 beginRemoveRows(QModelIndex(), row, row + count - 1);
229
230 for (int r = 0; r < count; ++r)
231 lst.removeAt(row);
232
233 endRemoveRows();
234
235 return true;
236}

◆ rowCount()

int QVariantListModel::rowCount ( const QModelIndex &  parent = QModelIndex()) const
override

Returns the number of rows in the model. This value corresponds to the number of items in the model's internal variant list.

The optional parent argument is in most models used to specify the parent of the rows to be counted. Because this is a list if a valid parent is specified, the result will always be 0.

See also
insertRows(), removeRows(), QAbstractItemModel::rowCount()

Definition at line 122 of file qvariantlistmodel.cpp.

123{
124 if (parent.isValid())
125 return 0;
126
127 return lst.count();
128}

◆ setData()

bool QVariantListModel::setData ( const QModelIndex &  index,
const QVariant &  value,
int  role = Qt::EditRole 
)
override

Sets the data for the specified role in the item with the given index in the model, to the provided value.

The dataChanged() signal is emitted if the item is changed.

See also
Qt::ItemDataRole, data()

Definition at line 171 of file qvariantlistmodel.cpp.

173{
174 if (index.row() >= 0 && index.row() < lst.size()
175 && (role == Qt::EditRole || role == Qt::DisplayRole))
176 {
177 lst.replace(index.row(), value);
178 dataChanged(index, index, QVector<int>() << role);
179 return true;
180 }
181 return false;
182}

◆ setVariantList()

void QVariantListModel::setVariantList ( const QVariantList &  list)

Sets the model's internal variant list to list. The model will notify any attached views that its underlying data has changed.

See also
dataChanged()

Definition at line 252 of file qvariantlistmodel.cpp.

253{
254 int size = lst.size();
255 bool sameSize = list.size() == size;
256 if (!sameSize)
257 {
258 beginResetModel();
259 }
260 lst = list;
261 if (!sameSize)
262 {
263 endResetModel();
264 } else
265 {
266 dataChanged(QAbstractListModel::index(0),
267 QAbstractListModel::index(size - 1));
268 }
269}

◆ sibling()

QModelIndex QVariantListModel::sibling ( int  row,
int  column,
const QModelIndex &  idx 
) const
override

\reimp

Definition at line 133 of file qvariantlistmodel.cpp.

135{
136 if (!idx.isValid() || column != 0 || row >= lst.count())
137 return QModelIndex();
138
139 return createIndex(row, 0);
140}

◆ variantList()

QVariantList QVariantListModel::variantList ( ) const

Returns the variant list used by the model to store data.

Definition at line 241 of file qvariantlistmodel.cpp.

242{
243 return lst;
244}

The documentation for this class was generated from the following files: