From ba583b5e31a4dca3fc0701637ab1cb70c526d19b Mon Sep 17 00:00:00 2001 From: Volker Hilsheimer Date: Tue, 19 Dec 2023 11:16:23 +0100 Subject: [PATCH] Turn SpinBox Delegate example into snippets The essence of the example was already fully quoted in the model/view documentation. Move the code into a snippet source, and update the screenshot. Fixes: QTBUG-119976 Pick-to: 6.6 Change-Id: Id2f10bb26a650419969bbfa9b76cb74babd3319e Reviewed-by: Richard Moe Gustavsen Reviewed-by: Andreas Eliasson (cherry picked from commit 99eaae4323ff1fda2d8cc0184d824b6d9c3f23ad) Reviewed-by: Qt Cherry-pick Bot --- examples/widgets/doc/src/spinboxdelegate.qdoc | 118 ------------------ examples/widgets/itemviews/CMakeLists.txt | 1 - examples/widgets/itemviews/itemviews.pro | 1 - .../itemviews/spinboxdelegate/CMakeLists.txt | 37 ------ .../itemviews/spinboxdelegate/delegate.h | 29 ----- .../itemviews/spinboxdelegate/main.cpp | 48 ------- .../spinboxdelegate/spinboxdelegate.pro | 10 -- .../doc/images/spinboxdelegate-example.png | Bin 4762 -> 0 bytes .../doc/images/spinboxdelegate-example.webp | Bin 0 -> 40364 bytes .../doc/snippets/qitemdelegate/CMakeLists.txt | 12 ++ .../qitemdelegate/spinbox-delegate.cpp | 53 +++++--- .../doc/src/model-view-programming.qdoc | 24 ++-- src/widgets/doc/src/modelview.qdoc | 7 +- src/widgets/itemviews/qitemdelegate.cpp | 7 +- src/widgets/itemviews/qstyleditemdelegate.cpp | 3 +- 15 files changed, 62 insertions(+), 288 deletions(-) delete mode 100644 examples/widgets/doc/src/spinboxdelegate.qdoc delete mode 100644 examples/widgets/itemviews/spinboxdelegate/CMakeLists.txt delete mode 100644 examples/widgets/itemviews/spinboxdelegate/delegate.h delete mode 100644 examples/widgets/itemviews/spinboxdelegate/main.cpp delete mode 100644 examples/widgets/itemviews/spinboxdelegate/spinboxdelegate.pro delete mode 100644 src/widgets/doc/images/spinboxdelegate-example.png create mode 100644 src/widgets/doc/images/spinboxdelegate-example.webp create mode 100644 src/widgets/doc/snippets/qitemdelegate/CMakeLists.txt rename examples/widgets/itemviews/spinboxdelegate/delegate.cpp => src/widgets/doc/snippets/qitemdelegate/spinbox-delegate.cpp (59%) diff --git a/examples/widgets/doc/src/spinboxdelegate.qdoc b/examples/widgets/doc/src/spinboxdelegate.qdoc deleted file mode 100644 index bd3b68aa97c..00000000000 --- a/examples/widgets/doc/src/spinboxdelegate.qdoc +++ /dev/null @@ -1,118 +0,0 @@ -// Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GFDL-1.3-no-invariants-only - -/*! - \example itemviews/spinboxdelegate - \title Spin Box Delegate Example - \examplecategory {User Interface Components} - \ingroup examples-itemviews - \brief The Spin Box Delegate example shows how to create an editor for a custom delegate in - the model/view framework by reusing a standard Qt editor widget. - - The model/view framework provides a standard delegate that is used by default - with the standard view classes. For most purposes, the selection of editor - widgets available through this delegate is sufficient for editing text, boolean - values, and other simple data types. However, for specific data types, it is - sometimes necessary to use a custom delegate to either display the data in a - specific way, or allow the user to edit it with a custom control. - - \image spinboxdelegate-example.png - - This concepts behind this example are covered in the - \l{Model/View Programming#Delegate Classes}{Delegate Classes} chapter - of the \l{Model/View Programming} overview. - - \section1 SpinBoxDelegate Class Definition - - The definition of the delegate is as follows: - - \snippet itemviews/spinboxdelegate/delegate.h 0 - - The delegate class declares only those functions that are needed to - create an editor widget, display it at the correct location in a view, - and communicate with a model. Custom delegates can also provide their - own painting code by reimplementing the \c paintEvent() function. - Furthermore it is also possible to reuse (and avoid deleting) the editor - widget by reimplementing the \a destroyEditor() function. A reused widget - could be a mutable member created in the constructor and deleted in - the destructor. - - \section1 SpinBoxDelegate Class Implementation - - Delegates are often stateless. The constructor only needs to - call the base class's constructor with the parent QObject as its - argument: - - \snippet itemviews/spinboxdelegate/delegate.cpp 0 - - Since the delegate is a subclass of QStyledItemDelegate, the data it retrieves - from the model is displayed in a default style, and we do not need to - provide a custom \c paintEvent(). - - The \c createEditor() function returns an editor widget, in this case a - spin box that restricts values from the model to integers from 0 to 100 - inclusive. - - \snippet itemviews/spinboxdelegate/delegate.cpp 1 - - We install an event filter on the spin box to ensure that it behaves in - a way that is consistent with other delegates. The implementation for - the event filter is provided by the base class. - - The \c setEditorData() function reads data from the model, converts it - to an integer value, and writes it to the editor widget. - - \snippet itemviews/spinboxdelegate/delegate.cpp 2 - - Since the view treats delegates as ordinary QWidget instances, we have - to use a static cast before we can set the value in the spin box. - - The \c setModelData() function reads the contents of the spin box, and - writes it to the model. - - \snippet itemviews/spinboxdelegate/delegate.cpp 3 - - We call \l{QSpinBox::interpretText()}{interpretText()} to make sure that - we obtain the most up-to-date value in the spin box. - - The \c updateEditorGeometry() function updates the editor widget's - geometry using the information supplied in the style option. This is the - minimum that the delegate must do in this case. - - \snippet itemviews/spinboxdelegate/delegate.cpp 4 - - More complex editor widgets may divide the rectangle available in - \c{option.rect} between different child widgets if required. - - \section1 The Main Function - - This example is written in a slightly different way to many of the - other examples supplied with Qt. To demonstrate the use of a custom - editor widget in a standard view, it is necessary to set up a model - containing some arbitrary data and a view to display it. - - We set up the application in the normal way, construct a standard item - model to hold some data, set up a table view to use the data in the - model, and construct a custom delegate to use for editing: - - \snippet itemviews/spinboxdelegate/main.cpp 0 - - The table view is informed about the delegate, and will use it to - display each of the items. Since the delegate is a subclass of - QStyledItemDelegate, each cell in the table will be rendered using standard - painting operations. - - We insert some arbitrary data into the model for demonstration purposes: - - \snippet itemviews/spinboxdelegate/main.cpp 1 - \snippet itemviews/spinboxdelegate/main.cpp 2 - - Finally, the table view is displayed with a window title, and we start - the application's event loop: - - \snippet itemviews/spinboxdelegate/main.cpp 3 - - Each of the cells in the table can now be edited in the usual way, but - the spin box ensures that the data returned to the model is always - constrained by the values allowed by the spin box delegate. -*/ diff --git a/examples/widgets/itemviews/CMakeLists.txt b/examples/widgets/itemviews/CMakeLists.txt index 9659dafa015..b89e284467c 100644 --- a/examples/widgets/itemviews/CMakeLists.txt +++ b/examples/widgets/itemviews/CMakeLists.txt @@ -9,6 +9,5 @@ qt_internal_add_example(customsortfiltermodel) qt_internal_add_example(editabletreemodel) qt_internal_add_example(fetchmore) qt_internal_add_example(frozencolumn) -qt_internal_add_example(spinboxdelegate) qt_internal_add_example(spreadsheet) qt_internal_add_example(stardelegate) diff --git a/examples/widgets/itemviews/itemviews.pro b/examples/widgets/itemviews/itemviews.pro index 15ad2625544..92997782a2c 100644 --- a/examples/widgets/itemviews/itemviews.pro +++ b/examples/widgets/itemviews/itemviews.pro @@ -8,6 +8,5 @@ SUBDIRS = addressbook \ fetchmore \ frozencolumn \ simpletreemodel \ - spinboxdelegate \ spreadsheet \ stardelegate diff --git a/examples/widgets/itemviews/spinboxdelegate/CMakeLists.txt b/examples/widgets/itemviews/spinboxdelegate/CMakeLists.txt deleted file mode 100644 index 98d6579dd3b..00000000000 --- a/examples/widgets/itemviews/spinboxdelegate/CMakeLists.txt +++ /dev/null @@ -1,37 +0,0 @@ -# Copyright (C) 2022 The Qt Company Ltd. -# SPDX-License-Identifier: BSD-3-Clause - -cmake_minimum_required(VERSION 3.16) -project(spinboxdelegate LANGUAGES CXX) - -if(NOT DEFINED INSTALL_EXAMPLESDIR) - set(INSTALL_EXAMPLESDIR "examples") -endif() - -set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/itemviews/spinboxdelegate") - -find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets) - -qt_standard_project_setup() - -qt_add_executable(spinboxdelegate - delegate.cpp delegate.h - main.cpp -) - -set_target_properties(spinboxdelegate PROPERTIES - WIN32_EXECUTABLE TRUE - MACOSX_BUNDLE TRUE -) - -target_link_libraries(spinboxdelegate PRIVATE - Qt6::Core - Qt6::Gui - Qt6::Widgets -) - -install(TARGETS spinboxdelegate - RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}" - BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}" - LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}" -) diff --git a/examples/widgets/itemviews/spinboxdelegate/delegate.h b/examples/widgets/itemviews/spinboxdelegate/delegate.h deleted file mode 100644 index 8f1130a1d27..00000000000 --- a/examples/widgets/itemviews/spinboxdelegate/delegate.h +++ /dev/null @@ -1,29 +0,0 @@ -// Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause - -#ifndef DELEGATE_H -#define DELEGATE_H - -#include - -//! [0] -class SpinBoxDelegate : public QStyledItemDelegate -{ - Q_OBJECT - -public: - SpinBoxDelegate(QObject *parent = nullptr); - - QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, - const QModelIndex &index) const override; - - void setEditorData(QWidget *editor, const QModelIndex &index) const override; - void setModelData(QWidget *editor, QAbstractItemModel *model, - const QModelIndex &index) const override; - - void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, - const QModelIndex &index) const override; -}; -//! [0] - -#endif diff --git a/examples/widgets/itemviews/spinboxdelegate/main.cpp b/examples/widgets/itemviews/spinboxdelegate/main.cpp deleted file mode 100644 index 51277036bc2..00000000000 --- a/examples/widgets/itemviews/spinboxdelegate/main.cpp +++ /dev/null @@ -1,48 +0,0 @@ -// Copyright (C) 2016 The Qt Company Ltd. -// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause - -/* - main.cpp - - A simple example that shows how a view can use a custom delegate to edit - data obtained from a model. -*/ - -#include "delegate.h" - -#include -#include -#include -#include - -//! [0] -int main(int argc, char *argv[]) -{ - QApplication app(argc, argv); - - QStandardItemModel model(4, 2); - QTableView tableView; - tableView.setModel(&model); - - SpinBoxDelegate delegate; - tableView.setItemDelegate(&delegate); -//! [0] - - tableView.horizontalHeader()->setStretchLastSection(true); - -//! [1] - for (int row = 0; row < 4; ++row) { - for (int column = 0; column < 2; ++column) { - QModelIndex index = model.index(row, column, QModelIndex()); - model.setData(index, QVariant((row + 1) * (column + 1))); - } -//! [1] //! [2] - } -//! [2] - -//! [3] - tableView.setWindowTitle(QObject::tr("Spin Box Delegate")); - tableView.show(); - return app.exec(); -} -//! [3] diff --git a/examples/widgets/itemviews/spinboxdelegate/spinboxdelegate.pro b/examples/widgets/itemviews/spinboxdelegate/spinboxdelegate.pro deleted file mode 100644 index 2a6fed223ab..00000000000 --- a/examples/widgets/itemviews/spinboxdelegate/spinboxdelegate.pro +++ /dev/null @@ -1,10 +0,0 @@ -QT += widgets -requires(qtConfig(tableview)) - -HEADERS = delegate.h -SOURCES = delegate.cpp \ - main.cpp - -# install -target.path = $$[QT_INSTALL_EXAMPLES]/widgets/itemviews/spinboxdelegate -INSTALLS += target diff --git a/src/widgets/doc/images/spinboxdelegate-example.png b/src/widgets/doc/images/spinboxdelegate-example.png deleted file mode 100644 index 5e57a9c12b44bc470f9c4f80d898ed15da51a7dc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4762 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 diff --git a/src/widgets/doc/images/spinboxdelegate-example.webp b/src/widgets/doc/images/spinboxdelegate-example.webp new file mode 100644 index 0000000000000000000000000000000000000000..35b5770394ac994ac2fa899b8c4813dbc14a7c6d GIT binary patch literal 40364 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�dO`}W`u_8*-5MgUXekHfO8}V9h@E{%RvgHLAWYLXH+??AnLZa zfE`fgu!E}F-T-w&n!*mNYj^?G4r>THt*zh(R5`35>bAFl9Z=@5gRcnk-nBAmgvq?j zt1}(laTpLMvq%8v?Qs@7$UxC3z?pjlZkp#42h6yZ&OBGm{=q5J=nS5^D1H*g9>dc8 zIc_vCKOq{i`vuUTQ4c#%0@}(eI1yZ>!u~B#m0d>N*Iu6Yg~SsH(t)NOa;L5N?3hM{ z&cj2<^U57GJ{42oY_)sS0e8K}5>ic{$h3HwLP-Ba1Gmf!if&1JhUuAvhMuFP_LHP> z`~HsIFf{up^~NPl0}|BVq%mZJP1RbV@*Rz zP9-g(lhRj`PxG<}0@&IzV}(|qO_)b% z^LUl;oyL|}4GTNdVQ(9L$G?OQs8h|@MXEH9dH{H{ei$XW7Rc*CA&TpI+uf5)p2!Q) zHc5)1Ca?}e%>oHZ=qnL1{Vr<=<m?s4)ToOYcYwe{FxRL-0J!>Y;( zi5+Fh9Z&Jf%Q9y)OP-(Lq$;a(v;MS@ceMo|By%*0+;7g+2Q_O0g|rJK%NdFyo8zHi zGvjS-^A!?*aX!*D7|K9*ZT4cn>3dDE!vAR=wjjT#fyckVUctls8(g@rx-K)^R=jOsNV`rRzD& z$%h#ycW?=F5VsA~%Di&=j)F8n;toH_4I|Sis`!+&smalWbxU4zSdpZCzTk79u|^X& zxBdAZ@?{F2^~VlPW0rFN&wH=Ent>U=WV=<9E&P=I;v23gu!G4Dm<_JJ-k45w)paFFo8Z;qjNpRiPMQQyJAc{Y1689reB z9+S>FyeqcWl3PX&*3 z1fgZ=XXbCwHT{vm!+x=CQzg*VI!wGX2v;rDq zj17~;zv~pCTxwh7h-xge`{tT`6#!{HF>K;QL3DbDi8`3-iR(mo?XnOvld6nCL#ZNa zGOV0%(f|S#B7@b=dN0U;IhCQrx%SCumK-D7JLIHP^=}nJC#aAB000000000000000 J00000005&?29N*% literal 0 HcmV?d00001 diff --git a/src/widgets/doc/snippets/qitemdelegate/CMakeLists.txt b/src/widgets/doc/snippets/qitemdelegate/CMakeLists.txt new file mode 100644 index 00000000000..43f30c8aa5f --- /dev/null +++ b/src/widgets/doc/snippets/qitemdelegate/CMakeLists.txt @@ -0,0 +1,12 @@ +# Copyright (C) 2023 The Qt Company Ltd. +# SPDX-License-Identifier: BSD-3-Clause + +add_library(widgets_qitemdelegate_snippets OBJECT + spinbox-delegate.cpp +) + +target_link_libraries(widgets_qitemdelegate_snippets PRIVATE + Qt::Core + Qt::Gui + Qt::Widgets +) diff --git a/examples/widgets/itemviews/spinboxdelegate/delegate.cpp b/src/widgets/doc/snippets/qitemdelegate/spinbox-delegate.cpp similarity index 59% rename from examples/widgets/itemviews/spinboxdelegate/delegate.cpp rename to src/widgets/doc/snippets/qitemdelegate/spinbox-delegate.cpp index 6aa2b9be42f..efe8a167337 100644 --- a/examples/widgets/itemviews/spinboxdelegate/delegate.cpp +++ b/src/widgets/doc/snippets/qitemdelegate/spinbox-delegate.cpp @@ -1,25 +1,37 @@ -// Copyright (C) 2016 The Qt Company Ltd. +// Copyright (C) 2023 The Qt Company Ltd. // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause -/* - delegate.cpp - - A delegate that allows the user to change integer values from the model - using a spin box widget. -*/ - -#include "delegate.h" - +#include #include -//! [0] +//! [declaration] +class SpinBoxDelegate : public QStyledItemDelegate +{ + Q_OBJECT + +public: + SpinBoxDelegate(QObject *parent = nullptr); + + QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, + const QModelIndex &index) const override; + + void setEditorData(QWidget *editor, const QModelIndex &index) const override; + void setModelData(QWidget *editor, QAbstractItemModel *model, + const QModelIndex &index) const override; + + void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, + const QModelIndex &index) const override; +}; +//! [declaration] + +//! [constructor] SpinBoxDelegate::SpinBoxDelegate(QObject *parent) : QStyledItemDelegate(parent) { } -//! [0] +//! [constructor] -//! [1] +//! [createEditor] QWidget *SpinBoxDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &/* option */, const QModelIndex &/* index */) const @@ -31,9 +43,9 @@ QWidget *SpinBoxDelegate::createEditor(QWidget *parent, return editor; } -//! [1] +//! [createEditor] -//! [2] +//! [setEditorData] void SpinBoxDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const { @@ -42,9 +54,9 @@ void SpinBoxDelegate::setEditorData(QWidget *editor, QSpinBox *spinBox = static_cast(editor); spinBox->setValue(value); } -//! [2] +//! [setEditorData] -//! [3] +//! [setModelData] void SpinBoxDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const { @@ -54,13 +66,14 @@ void SpinBoxDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, model->setData(index, value, Qt::EditRole); } -//! [3] +//! [setModelData] -//! [4] +//! [updateEditorGeometry] void SpinBoxDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &/* index */) const { editor->setGeometry(option.rect); } -//! [4] +//! [updateEditorGeometry] + diff --git a/src/widgets/doc/src/model-view-programming.qdoc b/src/widgets/doc/src/model-view-programming.qdoc index 5d620716a6b..5461619a4de 100644 --- a/src/widgets/doc/src/model-view-programming.qdoc +++ b/src/widgets/doc/src/model-view-programming.qdoc @@ -686,9 +686,8 @@ implementations of these functions. Editors for delegates can be implemented either by using widgets to manage - the editing process or by handling events directly. - The first approach is covered later in this section, and it is also - shown in the \l{Spin Box Delegate Example}{Spin Box Delegate} example. + the editing process or by handling events directly. The first approach is + covered later in this section. \section2 Using an existing delegate @@ -718,13 +717,15 @@ data entry. We construct a table view to display the contents of the model, and this will use the custom delegate for editing. - \image spinboxdelegate-example.png + \image spinboxdelegate-example.webp We subclass the delegate from \l QStyledItemDelegate because we do not want to write custom display functions. However, we must still provide functions to manage the editor widget: - \snippet itemviews/spinboxdelegate/delegate.h 0 + \snippet qitemdelegate/spinbox-delegate.cpp declaration + \codeline + \snippet qitemdelegate/spinbox-delegate.cpp constructor Note that no editor widgets are set up when the delegate is constructed. We only construct an editor widget when it is needed. @@ -738,7 +739,7 @@ supplied with everything that the delegate needs to be able to set up a suitable widget: - \snippet itemviews/spinboxdelegate/delegate.cpp 1 + \snippet qitemdelegate/spinbox-delegate.cpp createEditor Note that we do not need to keep a pointer to the editor widget because the view takes responsibility for destroying it when it is no longer @@ -762,7 +763,7 @@ \l{Qt::ItemDataRole}{display role}, and set the value in the spin box accordingly. - \snippet itemviews/spinboxdelegate/delegate.cpp 2 + \snippet qitemdelegate/spinbox-delegate.cpp setEditorData In this example, we know that the editor widget is a spin box, but we could have provided different editors for different types of data in @@ -775,7 +776,7 @@ asks the delegate to store the edited value in the model by calling the \l{QAbstractItemDelegate::setModelData()}{setModelData()} function. - \snippet itemviews/spinboxdelegate/delegate.cpp 3 + \snippet qitemdelegate/spinbox-delegate.cpp setModelData Since the view manages the editor widgets for the delegate, we only need to update the model with the contents of the editor supplied. @@ -786,8 +787,8 @@ finished editing by emitting the \l{QAbstractItemDelegate::closeEditor()}{closeEditor()} signal. The view ensures that the editor widget is closed and destroyed. In - this example, we only provide simple editing facilities, so we need - never emit this signal. + this example, we only provide simple editing facilities, so we never + need to emit this signal. All the operations on data are performed through the interface provided by \l QAbstractItemModel. This makes the delegate mostly @@ -806,7 +807,7 @@ the view provides all the necessary geometry information inside a \l{QStyleOptionViewItem}{view option} object. - \snippet itemviews/spinboxdelegate/delegate.cpp 4 + \snippet qitemdelegate/spinbox-delegate.cpp updateEditorGeometry In this case, we just use the geometry information provided by the view option in the item rectangle. A delegate that renders items with @@ -2308,7 +2309,6 @@ \section1 Related Examples \list - \li \l{itemviews/spinboxdelegate}{Spin Box Delegate} \li \l{itemviews/simpletreemodel}{Simple Tree Model} \endlist */ diff --git a/src/widgets/doc/src/modelview.qdoc b/src/widgets/doc/src/modelview.qdoc index 6ae62ce7cd1..7dd7503d299 100644 --- a/src/widgets/doc/src/modelview.qdoc +++ b/src/widgets/doc/src/modelview.qdoc @@ -534,7 +534,7 @@ Other references to delegates in Qt Documentation: \list - \li \l{Spin Box Delegate Example} + \li \l{Delegate Classes} \li \l{QAbstractItemDelegate}{QAbstractItemDelegate Class Reference} \li \l{QSqlRelationalDelegate}{QSqlRelationalDelegate Class Reference} \li \l{QStyledItemDelegate}{QStyledItemDelegate Class Reference} @@ -826,11 +826,6 @@ \li QDataWidgetMapper to map QLineEdit, QTextEdit and QSpinBox \li QStandardItemModel \li Basic QDataWidgetMapper usage - \row - \li Spin Box Delegate - \li QTableView - \li QStandardItemModel - \li Custom delegate that uses a spin box as a cell editor \row \li Spreadsheet \li {2, 1} QTableView diff --git a/src/widgets/itemviews/qitemdelegate.cpp b/src/widgets/itemviews/qitemdelegate.cpp index 84a8223bfe3..e4a90278b49 100644 --- a/src/widgets/itemviews/qitemdelegate.cpp +++ b/src/widgets/itemviews/qitemdelegate.cpp @@ -266,8 +266,8 @@ QSizeF QItemDelegatePrivate::doTextLayout(int lineWidth) const made available to delegates with the default item editor factory. This way, there is no need to subclass QItemDelegate. An alternative is to reimplement createEditor(), setEditorData(), - setModelData(), and updateEditorGeometry(). This process is - described in the \l{Spin Box Delegate Example}. + setModelData(), and updateEditorGeometry(). This process is described + in the \l{A simple delegate}{Model/View Programming overview documentation}. \section1 QStyledItemDelegate vs. QItemDelegate @@ -281,8 +281,7 @@ QSizeF QItemDelegatePrivate::doTextLayout(int lineWidth) const for either class should be equal unless the custom delegate needs to use the style for drawing. - \sa {Delegate Classes}, QStyledItemDelegate, QAbstractItemDelegate, - {Spin Box Delegate Example} + \sa {Delegate Classes}, QStyledItemDelegate, QAbstractItemDelegate */ /*! diff --git a/src/widgets/itemviews/qstyleditemdelegate.cpp b/src/widgets/itemviews/qstyleditemdelegate.cpp index 871c0163c90..0587e8d0bea 100644 --- a/src/widgets/itemviews/qstyleditemdelegate.cpp +++ b/src/widgets/itemviews/qstyleditemdelegate.cpp @@ -204,8 +204,7 @@ public: documentation for details. \sa {Delegate Classes}, QItemDelegate, QAbstractItemDelegate, QStyle, - {Spin Box Delegate Example}, {Star Delegate Example}, {Color - Editor Factory Example} + {Star Delegate Example}, {Color Editor Factory Example} */