diff options
author | Volker Hilsheimer <volker.hilsheimer@qt.io> | 2023-12-19 11:16:23 +0100 |
---|---|---|
committer | Volker Hilsheimer <volker.hilsheimer@qt.io> | 2023-12-20 13:18:02 +0100 |
commit | 99eaae4323ff1fda2d8cc0184d824b6d9c3f23ad (patch) | |
tree | 6c8073fcb263dff611e057df9b5a0653fce40f2b /examples | |
parent | 7996a3fc7f408a2f92b103f6d03d172b1f0d9295 (diff) |
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.7 6.6
Change-Id: Id2f10bb26a650419969bbfa9b76cb74babd3319e
Reviewed-by: Richard Moe Gustavsen <richard.gustavsen@qt.io>
Reviewed-by: Andreas Eliasson <andreas.eliasson@qt.io>
Diffstat (limited to 'examples')
-rw-r--r-- | examples/widgets/doc/src/spinboxdelegate.qdoc | 118 | ||||
-rw-r--r-- | examples/widgets/itemviews/CMakeLists.txt | 1 | ||||
-rw-r--r-- | examples/widgets/itemviews/itemviews.pro | 1 | ||||
-rw-r--r-- | examples/widgets/itemviews/spinboxdelegate/CMakeLists.txt | 37 | ||||
-rw-r--r-- | examples/widgets/itemviews/spinboxdelegate/delegate.cpp | 66 | ||||
-rw-r--r-- | examples/widgets/itemviews/spinboxdelegate/delegate.h | 29 | ||||
-rw-r--r-- | examples/widgets/itemviews/spinboxdelegate/main.cpp | 48 | ||||
-rw-r--r-- | examples/widgets/itemviews/spinboxdelegate/spinboxdelegate.pro | 10 |
8 files changed, 0 insertions, 310 deletions
diff --git a/examples/widgets/doc/src/spinboxdelegate.qdoc b/examples/widgets/doc/src/spinboxdelegate.qdoc deleted file mode 100644 index bd3b68aa97..0000000000 --- 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 9659dafa01..b89e284467 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 15ad262554..92997782a2 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 98d6579dd3..0000000000 --- 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.cpp b/examples/widgets/itemviews/spinboxdelegate/delegate.cpp deleted file mode 100644 index 6aa2b9be42..0000000000 --- a/examples/widgets/itemviews/spinboxdelegate/delegate.cpp +++ /dev/null @@ -1,66 +0,0 @@ -// Copyright (C) 2016 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 <QSpinBox> - -//! [0] -SpinBoxDelegate::SpinBoxDelegate(QObject *parent) - : QStyledItemDelegate(parent) -{ -} -//! [0] - -//! [1] -QWidget *SpinBoxDelegate::createEditor(QWidget *parent, - const QStyleOptionViewItem &/* option */, - const QModelIndex &/* index */) const -{ - QSpinBox *editor = new QSpinBox(parent); - editor->setFrame(false); - editor->setMinimum(0); - editor->setMaximum(100); - - return editor; -} -//! [1] - -//! [2] -void SpinBoxDelegate::setEditorData(QWidget *editor, - const QModelIndex &index) const -{ - int value = index.model()->data(index, Qt::EditRole).toInt(); - - QSpinBox *spinBox = static_cast<QSpinBox*>(editor); - spinBox->setValue(value); -} -//! [2] - -//! [3] -void SpinBoxDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, - const QModelIndex &index) const -{ - QSpinBox *spinBox = static_cast<QSpinBox*>(editor); - spinBox->interpretText(); - int value = spinBox->value(); - - model->setData(index, value, Qt::EditRole); -} -//! [3] - -//! [4] -void SpinBoxDelegate::updateEditorGeometry(QWidget *editor, - const QStyleOptionViewItem &option, - const QModelIndex &/* index */) const -{ - editor->setGeometry(option.rect); -} -//! [4] diff --git a/examples/widgets/itemviews/spinboxdelegate/delegate.h b/examples/widgets/itemviews/spinboxdelegate/delegate.h deleted file mode 100644 index 8f1130a1d2..0000000000 --- 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 <QStyledItemDelegate> - -//! [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 51277036bc..0000000000 --- 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 <QApplication> -#include <QHeaderView> -#include <QStandardItemModel> -#include <QTableView> - -//! [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 2a6fed223a..0000000000 --- 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 |