1
<?xml version="1.0" encoding="iso-8859-1"?>
3
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
4
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
6
<title>Qt 4.0: treemodel.cpp Example File (itemviews/simpletreemodel/treemodel.cpp)</title>
7
<style>h3.fn,span.fn { margin-left: 1cm; text-indent: -1cm; }
8
a:link { color: #004faf; text-decoration: none }
9
a:visited { color: #672967; text-decoration: none }
10
td.postheader { font-family: sans-serif }
11
tr.address { font-family: sans-serif }
12
body { background: #ffffff; color: black; }</style>
15
<table border="0" cellpadding="0" cellspacing="0" width="100%">
17
<td align="left" valign="top" width="32"><img src="images/qt-logo.png" align="left" width="32" height="32" border="0" /></td>
18
<td width="1"> </td><td class="postheader" valign="center"><a href="index.html"><font color="#004faf">Home</font></a> · <a href="classes.html"><font color="#004faf">All Classes</font></a> · <a href="mainclasses.html"><font color="#004faf">Main Classes</font></a> · <a href="annotated.html"><font color="#004faf">Annotated</font></a> · <a href="groups.html"><font color="#004faf">Grouped Classes</font></a> · <a href="functions.html"><font color="#004faf">Functions</font></a></td>
19
<td align="right" valign="top" width="230"><img src="images/trolltech-logo.png" align="right" width="203" height="32" border="0" /></td></tr></table><h1 align="center">treemodel.cpp Example File<br /><small><small>itemviews/simpletreemodel/treemodel.cpp</small></small></h1>
20
<pre> /****************************************************************************
22
** Copyright (C) 2005-2005 Trolltech AS. All rights reserved.
24
** This file is part of the documentation of the Qt Toolkit.
26
** This file may be distributed under the terms of the Q Public License
27
** as defined by Trolltech AS of Norway and appearing in the file
28
** LICENSE.QPL included in the packaging of this file.
30
** This file may be distributed and/or modified under the terms of the
31
** GNU General Public License version 2 as published by the Free Software
32
** Foundation and appearing in the file LICENSE.GPL included in the
33
** packaging of this file.
35
** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
36
** information about Qt Commercial License Agreements.
37
** See http://www.trolltech.com/qpl/ for QPL licensing information.
38
** See http://www.trolltech.com/gpl/ for GPL licensing information.
40
** Contact info@trolltech.com if any conditions of this licensing are
43
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
44
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
46
****************************************************************************/
51
Provides a simple tree model to show how to create and use hierarchical
55
#include <QtGui>
57
#include "treeitem.h"
58
#include "treemodel.h"
60
TreeModel::TreeModel(const QString &data, QObject *parent)
61
: QAbstractItemModel(parent)
63
QList<QVariant> rootData;
64
rootData << "Title" << "Summary";
65
rootItem = new TreeItem(rootData);
66
setupModelData(data.split(QString("\n")), rootItem);
69
TreeModel::~TreeModel()
74
int TreeModel::columnCount(const QModelIndex &parent) const
77
return static_cast<TreeItem*>(parent.internalPointer())->columnCount();
79
return rootItem->columnCount();
82
QVariant TreeModel::data(const QModelIndex &index, int role) const
87
if (role != Qt::DisplayRole)
90
TreeItem *item = static_cast<TreeItem*>(index.internalPointer());
92
return item->data(index.column());
95
Qt::ItemFlags TreeModel::flags(const QModelIndex &index) const
98
return Qt::ItemIsEnabled;
100
return Qt::ItemIsEnabled | Qt::ItemIsSelectable;
103
QVariant TreeModel::headerData(int section, Qt::Orientation orientation,
106
if (orientation == Qt::Horizontal && role == Qt::DisplayRole)
107
return rootItem->data(section);
112
QModelIndex TreeModel::index(int row, int column, const QModelIndex &parent)
115
TreeItem *parentItem;
117
if (!parent.isValid())
118
parentItem = rootItem;
120
parentItem = static_cast<TreeItem*>(parent.internalPointer());
122
TreeItem *childItem = parentItem->child(row);
124
return createIndex(row, column, childItem);
126
return QModelIndex();
129
QModelIndex TreeModel::parent(const QModelIndex &index) const
131
if (!index.isValid())
132
return QModelIndex();
134
TreeItem *childItem = static_cast<TreeItem*>(index.internalPointer());
135
TreeItem *parentItem = childItem->parent();
137
if (parentItem == rootItem)
138
return QModelIndex();
140
return createIndex(parentItem->row(), 0, parentItem);
143
int TreeModel::rowCount(const QModelIndex &parent) const
145
TreeItem *parentItem;
147
if (!parent.isValid())
148
parentItem = rootItem;
150
parentItem = static_cast<TreeItem*>(parent.internalPointer());
152
return parentItem->childCount();
155
void TreeModel::setupModelData(const QStringList &lines, TreeItem *parent)
157
QList<TreeItem*> parents;
158
QList<int> indentations;
159
parents << parent;
160
indentations << 0;
164
while (number < lines.count()) {
166
while (position < lines[number].length()) {
167
if (lines[number].mid(position, 1) != " ")
172
QString lineData = lines[number].mid(position).trimmed();
174
if (!lineData.isEmpty()) {
175
// Read the column data from the rest of the line.
176
QStringList columnStrings = lineData.split("\t", QString::SkipEmptyParts);
177
QList<QVariant> columnData;
178
for (int column = 0; column < columnStrings.count(); ++column)
179
columnData << columnStrings[column];
181
if (position > indentations.last()) {
182
// The last child of the current parent is now the new parent
183
// unless the current parent has no children.
185
if (parents.last()->childCount() > 0) {
186
parents << parents.last()->child(parents.last()->childCount()-1);
187
indentations << position;
190
while (position < indentations.last() && parents.count() > 0) {
192
indentations.pop_back();
196
// Append a new item to the current parent's list of children.
197
parents.last()->appendChild(new TreeItem(columnData, parents.last()));
203
<p /><address><hr /><div align="center">
204
<table width="100%" cellspacing="0" border="0"><tr class="address">
205
<td width="30%">Copyright © 2005 <a href="trolltech.html">Trolltech</a></td>
206
<td width="40%" align="center"><a href="trademarks.html">Trademarks</a></td>
207
<td width="30%" align="right"><div align="right">Qt 4.0.0</div></td>
208
</tr></table></div></address></body>