summaryrefslogtreecommitdiffstats
path: root/examples
diff options
context:
space:
mode:
authorVolker Hilsheimer <volker.hilsheimer@qt.io>2023-12-19 11:16:23 +0100
committerVolker Hilsheimer <volker.hilsheimer@qt.io>2023-12-20 13:18:02 +0100
commit99eaae4323ff1fda2d8cc0184d824b6d9c3f23ad (patch)
tree6c8073fcb263dff611e057df9b5a0653fce40f2b /examples
parent7996a3fc7f408a2f92b103f6d03d172b1f0d9295 (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.qdoc118
-rw-r--r--examples/widgets/itemviews/CMakeLists.txt1
-rw-r--r--examples/widgets/itemviews/itemviews.pro1
-rw-r--r--examples/widgets/itemviews/spinboxdelegate/CMakeLists.txt37
-rw-r--r--examples/widgets/itemviews/spinboxdelegate/delegate.cpp66
-rw-r--r--examples/widgets/itemviews/spinboxdelegate/delegate.h29
-rw-r--r--examples/widgets/itemviews/spinboxdelegate/main.cpp48
-rw-r--r--examples/widgets/itemviews/spinboxdelegate/spinboxdelegate.pro10
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