source: trunk/src/gui/itemviews/qabstractitemdelegate.cpp@ 746

Last change on this file since 746 was 651, checked in by Dmitry A. Kuminov, 16 years ago

trunk: Merged in qt 4.6.2 sources.

File size: 13.1 KB
Line 
1/****************************************************************************
2**
3** Copyright (C) 2010 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 QtGui module 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#include "qabstractitemdelegate.h"
43
44#ifndef QT_NO_ITEMVIEWS
45#include <qabstractitemmodel.h>
46#include <qabstractitemview.h>
47#include <qfontmetrics.h>
48#include <qwhatsthis.h>
49#include <qtooltip.h>
50#include <qevent.h>
51#include <qstring.h>
52#include <qdebug.h>
53#include <private/qtextengine_p.h>
54
55QT_BEGIN_NAMESPACE
56
57/*!
58 \class QAbstractItemDelegate
59
60 \brief The QAbstractItemDelegate class is used to display and edit
61 data items from a model.
62
63 \ingroup model-view
64
65
66 A QAbstractItemDelegate provides the interface and common functionality
67 for delegates in the model/view architecture. Delegates display
68 individual items in views, and handle the editing of model data.
69
70 The QAbstractItemDelegate class is one of the \l{Model/View Classes}
71 and is part of Qt's \l{Model/View Programming}{model/view framework}.
72
73 To render an item in a custom way, you must implement paint() and
74 sizeHint(). The QItemDelegate class provides default implementations for
75 these functions; if you do not need custom rendering, subclass that
76 class instead.
77
78 We give an example of drawing a progress bar in items; in our case
79 for a package management program.
80
81 \image widgetdelegate.png
82
83 We create the \c WidgetDelegate class, which inherits from
84 QStyledItemDelegate. We do the drawing in the paint() function:
85
86 \snippet doc/src/snippets/widgetdelegate.cpp 0
87
88 Notice that we use a QStyleOptionProgressBar and initialize its
89 members. We can then use the current QStyle to draw it.
90
91 To provide custom editing, there are two approaches that can be
92 used. The first approach is to create an editor widget and display
93 it directly on top of the item. To do this you must reimplement
94 createEditor() to provide an editor widget, setEditorData() to populate
95 the editor with the data from the model, and setModelData() so that the
96 delegate can update the model with data from the editor.
97
98 The second approach is to handle user events directly by reimplementing
99 editorEvent().
100
101 \sa {model-view-programming}{Model/View Programming}, QItemDelegate,
102 {Pixelator Example}, QStyledItemDelegate, QStyle
103*/
104
105/*!
106 \enum QAbstractItemDelegate::EndEditHint
107
108 This enum describes the different hints that the delegate can give to the
109 model and view components to make editing data in a model a comfortable
110 experience for the user.
111
112 \value NoHint There is no recommended action to be performed.