source: trunk/doc/src/snippets/persistentindexes/model.cpp@ 561

Last change on this file since 561 was 561, checked in by Dmitry A. Kuminov, 15 years ago

trunk: Merged in qt 4.6.1 sources.

File size: 5.1 KB
Line 
1/****************************************************************************
2**
3** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies).
4** All rights reserved.
5** Contact: Nokia Corporation ([email protected])
6**
7** This file is part of the documentation of the Qt Toolkit.
8**
9** $QT_BEGIN_LICENSE:LGPL$
10** Commercial Usage
11** Licensees holding valid Qt Commercial licenses may use this file in
12** accordance with the Qt Commercial License Agreement provided with the
13** Software or, alternatively, in accordance with the terms contained in
14** a written agreement between you and Nokia.
15**
16** GNU Lesser General Public License Usage
17** Alternatively, this file may be used under the terms of the GNU Lesser
18** General Public License version 2.1 as published by the Free Software
19** Foundation and appearing in the file LICENSE.LGPL included in the
20** packaging of this file. Please review the following information to
21** ensure the GNU Lesser General Public License version 2.1 requirements
22** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
23**
24** In addition, as a special exception, Nokia gives you certain additional
25** rights. These rights are described in the Nokia Qt LGPL Exception
26** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
27**
28** GNU General Public License Usage
29** Alternatively, this file may be used under the terms of the GNU
30** General Public License version 3.0 as published by the Free Software
31** Foundation and appearing in the file LICENSE.GPL included in the
32** packaging of this file. Please review the following information to
33** ensure the GNU General Public License version 3.0 requirements will be
34** met: http://www.gnu.org/copyleft/gpl.html.
35**
36** If you have questions regarding the use of this file, please contact
37** Nokia at [email protected].
38** $QT_END_LICENSE$
39**
40****************************************************************************/
41
42/*
43 model.cpp
44
45 A simple model that uses a QStringList as its data source.
46*/
47
48#include <qdebug.h>
49
50#include "model.h"
51
52/*!
53 Returns the number of items in the string list as the number of rows
54 in the model.
55*/
56
57int StringListModel::rowCount(const QModelIndex &parent) const
58{
59 return stringList.count();
60}
61
62/*!
63 Returns an appropriate value for the requested data.
64 If the view requests an invalid index, an invalid variant is returned.
65 If a header is requested then we just return the column or row number,
66 depending on the orientation of the header.
67 Any valid index that corresponds to a string in the list causes that
68 string to be returned.
69*/
70
71QVariant StringListModel::data(const QModelIndex &index, int role) const
72{
73 if (!index.isValid())
74 return QVariant();
75
76 if (index.row() < 0 || index.row() >= stringList.size())
77 return QVariant();
78
79 if (role == Qt::DisplayRole)
80 return stringList.at(index.row());
81 else
82 return QVariant();
83}
84
85/*!
86 Returns the appropriate header string depending on the orientation of
87 the header and the section. If anything other than the display role is
88 requested, we return an invalid variant.
89*/
90
91QVariant StringListModel::headerData(int section, Qt::Orientation orientation,
92 int role) const
93{
94 if (role != Qt::DisplayRole)
95 return QVariant();
96
97 if (orientation == Qt::Horizontal)
98 return QString("Column %1").arg(section);
99 else
100 return QString("Row %1").arg(section);
101}
102
103/*!
104 Returns an appropriate value for the item's flags. Valid items are
105 enabled, selectable, and editable.
106*/
107
108Qt::ItemFlags StringListModel::flags(const QModelIndex &index) const
109{
110 if (!index.isValid())
111 return Qt::ItemIsEnabled;
112
113 return QAbstractItemModel::flags(index) | Qt::ItemIsEditable;
114}
115
116/*!
117 Changes an item in the string list, but only if the following conditions
118 are met:
119
120 * The index supplied is valid.
121 * The index corresponds to an item to be shown in a view.
122 * The role associated with editing text is specified.
123
124 The dataChanged() signal is emitted if the item is changed.
125*/
126
127bool StringListModel::setData(const QModelIndex &index,
128 const QVariant &value, int role)
129{
130 if (index.isValid() && role == Qt::EditRole) {
131
132 stringList.replace(index.row(), value.toString());
133 emit dataChanged(index, index);
134 return true;
135 }
136 return false;
137}
138
139/*!
140 Inserts a number of rows into the model at the specified position.
141*/
142
143bool StringListModel::insertRows(int position, int rows, const QModelIndex &parent)
144{
145 beginInsertRows(parent, position, position + rows - 1);
146
147 for (int row = 0; row < rows; ++row) {
148 stringList.insert(position, "");
149 }
150
151 endInsertRows();
152 return true;
153}
154
155/*!
156 Removes a number of rows from the model at the specified position.
157*/
158
159bool StringListModel::removeRows(int position, int rows, const QModelIndex &parent)
160{
161 beginRemoveRows(parent, position, position + rows - 1);
162
163 for (int row = 0; row < rows; ++row) {
164 stringList.removeAt(position);
165 }
166
167 endRemoveRows();
168 return true;
169}
Note: See TracBrowser for help on using the repository browser.