diff options
Diffstat (limited to 'tests/manual/examples/widgets/richtext/calendar')
5 files changed, 277 insertions, 0 deletions
diff --git a/tests/manual/examples/widgets/richtext/calendar/CMakeLists.txt b/tests/manual/examples/widgets/richtext/calendar/CMakeLists.txt new file mode 100644 index 0000000000..7b8e10060b --- /dev/null +++ b/tests/manual/examples/widgets/richtext/calendar/CMakeLists.txt @@ -0,0 +1,37 @@ +# Copyright (C) 2022 The Qt Company Ltd. +# SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause + +cmake_minimum_required(VERSION 3.16) +project(calendar LANGUAGES CXX) + +if(NOT DEFINED INSTALL_EXAMPLESDIR) + set(INSTALL_EXAMPLESDIR "examples") +endif() + +set(INSTALL_EXAMPLEDIR "${INSTALL_EXAMPLESDIR}/widgets/richtext/calendar") + +find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets) + +qt_standard_project_setup() + +qt_add_executable(calendar + main.cpp + mainwindow.cpp mainwindow.h +) + +set_target_properties(calendar PROPERTIES + WIN32_EXECUTABLE TRUE + MACOSX_BUNDLE TRUE +) + +target_link_libraries(calendar PRIVATE + Qt6::Core + Qt6::Gui + Qt6::Widgets +) + +install(TARGETS calendar + RUNTIME DESTINATION "${INSTALL_EXAMPLEDIR}" + BUNDLE DESTINATION "${INSTALL_EXAMPLEDIR}" + LIBRARY DESTINATION "${INSTALL_EXAMPLEDIR}" +) diff --git a/tests/manual/examples/widgets/richtext/calendar/calendar.pro b/tests/manual/examples/widgets/richtext/calendar/calendar.pro new file mode 100644 index 0000000000..199c1dbb8d --- /dev/null +++ b/tests/manual/examples/widgets/richtext/calendar/calendar.pro @@ -0,0 +1,10 @@ +QT += widgets +requires(qtConfig(combobox)) + +HEADERS = mainwindow.h +SOURCES = main.cpp \ + mainwindow.cpp + +# install +target.path = $$[QT_INSTALL_EXAMPLES]/widgets/richtext/calendar +INSTALLS += target diff --git a/tests/manual/examples/widgets/richtext/calendar/main.cpp b/tests/manual/examples/widgets/richtext/calendar/main.cpp new file mode 100644 index 0000000000..5641ae527a --- /dev/null +++ b/tests/manual/examples/widgets/richtext/calendar/main.cpp @@ -0,0 +1,15 @@ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause + +#include <QApplication> + +#include "mainwindow.h" + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + MainWindow window; + window.resize(640, 256); + window.show(); + return app.exec(); +} diff --git a/tests/manual/examples/widgets/richtext/calendar/mainwindow.cpp b/tests/manual/examples/widgets/richtext/calendar/mainwindow.cpp new file mode 100644 index 0000000000..0b44c96d46 --- /dev/null +++ b/tests/manual/examples/widgets/richtext/calendar/mainwindow.cpp @@ -0,0 +1,179 @@ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause + +#include "mainwindow.h" + +#include <QtWidgets> + +//! [0] +MainWindow::MainWindow() +{ + selectedDate = QDate::currentDate(); + fontSize = 10; + + QWidget *centralWidget = new QWidget; +//! [0] + +//! [1] + QLabel *dateLabel = new QLabel(tr("Date:")); + QComboBox *monthCombo = new QComboBox; + + for (int month = 1; month <= 12; ++month) + monthCombo->addItem(QLocale::system().monthName(month)); + + QDateTimeEdit *yearEdit = new QDateTimeEdit; + yearEdit->setDisplayFormat("yyyy"); + yearEdit->setDateRange(QDate(1753, 1, 1), QDate(8000, 1, 1)); +//! [1] + + monthCombo->setCurrentIndex(selectedDate.month() - 1); + yearEdit->setDate(selectedDate); + +//! [2] + QLabel *fontSizeLabel = new QLabel(tr("Font size:")); + QSpinBox *fontSizeSpinBox = new QSpinBox; + fontSizeSpinBox->setRange(1, 64); + + editor = new QTextBrowser; + insertCalendar(); +//! [2] + +//! [3] + connect(monthCombo, &QComboBox::activated, + this, &MainWindow::setMonth); + connect(yearEdit, &QDateTimeEdit::dateChanged, + this, &MainWindow::setYear); + connect(fontSizeSpinBox, &QSpinBox::valueChanged, + this, &MainWindow::setFontSize); +//! [3] + + fontSizeSpinBox->setValue(10); + +//! [4] + QHBoxLayout *controlsLayout = new QHBoxLayout; + controlsLayout->addWidget(dateLabel); + controlsLayout->addWidget(monthCombo); + controlsLayout->addWidget(yearEdit); + controlsLayout->addSpacing(24); + controlsLayout->addWidget(fontSizeLabel); + controlsLayout->addWidget(fontSizeSpinBox); + controlsLayout->addStretch(1); + + QVBoxLayout *centralLayout = new QVBoxLayout; + centralLayout->addLayout(controlsLayout); + centralLayout->addWidget(editor, 1); + centralWidget->setLayout(centralLayout); + + setCentralWidget(centralWidget); +//! [4] +} + +//! [5] +void MainWindow::insertCalendar() +{ + editor->clear(); + QTextCursor cursor = editor->textCursor(); + cursor.beginEditBlock(); + + QDate date(selectedDate.year(), selectedDate.month(), 1); +//! [5] + +//! [6] + QTextTableFormat tableFormat; + tableFormat.setAlignment(Qt::AlignHCenter); + tableFormat.setBackground(QColor("#e0e0e0")); + tableFormat.setCellPadding(2); + tableFormat.setCellSpacing(4); +//! [6] //! [7] + QList<QTextLength> constraints; + constraints << QTextLength(QTextLength::PercentageLength, 14) + << QTextLength(QTextLength::PercentageLength, 14) + << QTextLength(QTextLength::PercentageLength, 14) + << QTextLength(QTextLength::PercentageLength, 14) + << QTextLength(QTextLength::PercentageLength, 14) + << QTextLength(QTextLength::PercentageLength, 14) + << QTextLength(QTextLength::PercentageLength, 14); + tableFormat.setColumnWidthConstraints(constraints); +//! [7] + +//! [8] + QTextTable *table = cursor.insertTable(1, 7, tableFormat); +//! [8] + +//! [9] + QTextFrame *frame = cursor.currentFrame(); + QTextFrameFormat frameFormat = frame->frameFormat(); + frameFormat.setBorder(1); + frame->setFrameFormat(frameFormat); +//! [9] + +//! [10] + QTextCharFormat format = cursor.charFormat(); + format.setFontPointSize(fontSize); + + QTextCharFormat boldFormat = format; + boldFormat.setFontWeight(QFont::Bold); + + QTextCharFormat highlightedFormat = boldFormat; + highlightedFormat.setBackground(Qt::yellow); +//! [10] + +//! [11] + for (int weekDay = 1; weekDay <= 7; ++weekDay) { + QTextTableCell cell = table->cellAt(0, weekDay-1); +//! [11] //! [12] + QTextCursor cellCursor = cell.firstCursorPosition(); + cellCursor.insertText(QLocale::system().dayName(weekDay), boldFormat); + } +//! [12] + +//! [13] + table->insertRows(table->rows(), 1); +//! [13] + + while (date.month() == selectedDate.month()) { + int weekDay = date.dayOfWeek(); + QTextTableCell cell = table->cellAt(table->rows()-1, weekDay-1); + QTextCursor cellCursor = cell.firstCursorPosition(); + + if (date == QDate::currentDate()) + cellCursor.insertText(QString("%1").arg(date.day()), highlightedFormat); + else + cellCursor.insertText(QString("%1").arg(date.day()), format); + + date = date.addDays(1); + if (weekDay == 7 && date.month() == selectedDate.month()) + table->insertRows(table->rows(), 1); + } + + cursor.endEditBlock(); +//! [14] + setWindowTitle(tr("Calendar for %1 %2" + ).arg(QLocale::system().monthName(selectedDate.month()) + ).arg(selectedDate.year())); +} +//! [14] + +//! [15] +void MainWindow::setFontSize(int size) +{ + fontSize = size; + insertCalendar(); +} +//! [15] + +//! [16] +void MainWindow::setMonth(int month) +{ + selectedDate = QDate(selectedDate.year(), month + 1, selectedDate.day()); + insertCalendar(); +} +//! [16] + +//! [17] +void MainWindow::setYear(QDate date) +{ + selectedDate = QDate(date.year(), selectedDate.month(), selectedDate.day()); + insertCalendar(); +} +//! [17] diff --git a/tests/manual/examples/widgets/richtext/calendar/mainwindow.h b/tests/manual/examples/widgets/richtext/calendar/mainwindow.h new file mode 100644 index 0000000000..76632820d6 --- /dev/null +++ b/tests/manual/examples/widgets/richtext/calendar/mainwindow.h @@ -0,0 +1,36 @@ +// Copyright (C) 2016 The Qt Company Ltd. +// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause + +#ifndef MAINWINDOW_H +#define MAINWINDOW_H + +#include <QDate> +#include <QMainWindow> + +QT_BEGIN_NAMESPACE +class QTextBrowser; +QT_END_NAMESPACE + +//! [0] +class MainWindow : public QMainWindow +{ + Q_OBJECT + +public: + MainWindow(); + +public slots: + void setFontSize(int size); + void setMonth(int month); + void setYear(QDate date); + +private: + void insertCalendar(); + + int fontSize; + QDate selectedDate; + QTextBrowser *editor; +}; +//! [0] + +#endif // MAINWINDOW_H |