Calendar Example▲
Sélectionnez
/**
**************************************************************************
**
** Copyright (C) 2016 The Qt Company Ltd.
** Contact: https://www.qt.io/licensing/
**
** This file is part of the examples of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** BSD License Usage
** Alternatively, you may use this file under the terms of the BSD license
** as follows:
**
** "Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions are
** met:
** * Redistributions of source code must retain the above copyright
** notice, this list of conditions and the following disclaimer.
** * Redistributions in binary form must reproduce the above copyright
** notice, this list of conditions and the following disclaimer in
** the documentation and/or other materials provided with the
** distribution.
** * Neither the name of The Qt Company Ltd nor the names of its
** contributors may be used to endorse or promote products derived
** from this software without specific prior written permission.
**
**
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
**
** $QT_END_LICENSE$
**
***************************************************************************
*/
#include
"mainwindow.h"
#include <QtWidgets>
MainWindow::
MainWindow()
{
selectedDate =
QDate::
currentDate();
fontSize =
10
;
QWidget *
centralWidget =
new
QWidget;
QLabel *
dateLabel =
new
QLabel(tr("Date:"
));
QComboBox *
monthCombo =
new
QComboBox;
for
(int
month =
1
; month &
lt;=
12
; ++
month)
monthCombo-&
gt;addItem(QLocale::
system().monthName(month));
QDateTimeEdit *
yearEdit =
new
QDateTimeEdit;
yearEdit-&
gt;setDisplayFormat("yyyy"
);
yearEdit-&
gt;setDateRange(QDate(1753
, 1
, 1
), QDate(8000
, 1
, 1
));
monthCombo-&
gt;setCurrentIndex(selectedDate.month() -
1
);
yearEdit-&
gt;setDate(selectedDate);
QLabel *
fontSizeLabel =
new
QLabel(tr("Font size:"
));
QSpinBox *
fontSizeSpinBox =
new
QSpinBox;
fontSizeSpinBox-&
gt;setRange(1
, 64
);
editor =
new
QTextBrowser;
insertCalendar();
connect(monthCombo, SIGNAL(activated(int
)), this
, SLOT(setMonth(int
)));
connect(yearEdit, SIGNAL(dateChanged(QDate)), this
, SLOT(setYear(QDate)));
connect(fontSizeSpinBox, SIGNAL(valueChanged(int
)),
this
, SLOT(setFontSize(int
)));
fontSizeSpinBox-&
gt;setValue(10
);
QHBoxLayout *
controlsLayout =
new
QHBoxLayout;
controlsLayout-&
gt;addWidget(dateLabel);
controlsLayout-&
gt;addWidget(monthCombo);
controlsLayout-&
gt;addWidget(yearEdit);
controlsLayout-&
gt;addSpacing(24
);
controlsLayout-&
gt;addWidget(fontSizeLabel);
controlsLayout-&
gt;addWidget(fontSizeSpinBox);
controlsLayout-&
gt;addStretch(1
);
QVBoxLayout *
centralLayout =
new
QVBoxLayout;
centralLayout-&
gt;addLayout(controlsLayout);
centralLayout-&
gt;addWidget(editor, 1
);
centralWidget-&
gt;setLayout(centralLayout);
setCentralWidget(centralWidget);
}
void
MainWindow::
insertCalendar()
{
editor-&
gt;clear();
QTextCursor cursor =
editor-&
gt;textCursor();
cursor.beginEditBlock();
QDate date(selectedDate.year(), selectedDate.month(), 1
);
QTextTableFormat tableFormat;
tableFormat.setAlignment(Qt::
AlignHCenter);
tableFormat.setBackground(QColor("#e0e0e0"
));
tableFormat.setCellPadding(2
);
tableFormat.setCellSpacing(4
);
QVector&
lt;QTextLength&
gt; constraints;
constraints &
lt;&
lt; QTextLength(QTextLength::
PercentageLength, 14
)
&
lt;&
lt; QTextLength(QTextLength::
PercentageLength, 14
)
&
lt;&
lt; QTextLength(QTextLength::
PercentageLength, 14
)
&
lt;&
lt; QTextLength(QTextLength::
PercentageLength, 14
)
&
lt;&
lt; QTextLength(QTextLength::
PercentageLength, 14
)
&
lt;&
lt; QTextLength(QTextLength::
PercentageLength, 14
)
&
lt;&
lt; QTextLength(QTextLength::
PercentageLength, 14
);
tableFormat.setColumnWidthConstraints(constraints);
QTextTable *
table =
cursor.insertTable(1
, 7
, tableFormat);
QTextFrame *
frame =
cursor.currentFrame();
QTextFrameFormat frameFormat =
frame-&
gt;frameFormat();
frameFormat.setBorder(1
);
frame-&
gt;setFrameFormat(frameFormat);
QTextCharFormat format =
cursor.charFormat();
format.setFontPointSize(fontSize);
QTextCharFormat boldFormat =
format;
boldFormat.setFontWeight(QFont::
Bold);
QTextCharFormat highlightedFormat =
boldFormat;
highlightedFormat.setBackground(Qt::
yellow);
for
(int
weekDay =
1
; weekDay &
lt;=
7
; ++
weekDay) {
QTextTableCell cell =
table-&
gt;cellAt(0
, weekDay-
1
);
QTextCursor cellCursor =
cell.firstCursorPosition();
cellCursor.insertText(QLocale::
system().dayName(weekDay), boldFormat);
}
table-&
gt;insertRows(table-&
gt;rows(), 1
);
while
(date.month() ==
selectedDate.month()) {
int
weekDay =
date.dayOfWeek();
QTextTableCell cell =
table-&
gt;cellAt(table-&
gt;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
&
amp;&
amp; date.month() ==
selectedDate.month())
table-&
gt;insertRows(table-&
gt;rows(), 1
);
}
cursor.endEditBlock();
setWindowTitle(tr("Calendar for %1 %2"
).arg(QLocale::
system().monthName(selectedDate.month())
).arg(selectedDate.year()));
}
void
MainWindow::
setFontSize(int
size)
{
fontSize =
size;
insertCalendar();
}
void
MainWindow::
setMonth(int
month)
{
selectedDate =
QDate(selectedDate.year(), month +
1
, selectedDate.day());
insertCalendar();
}
void
MainWindow::
setYear(QDate date)
{
selectedDate =
QDate(date.year(), selectedDate.month(), selectedDate.day());
insertCalendar();
}