QCalendarWidget의 paintCell()을 사용하여 선택한 날짜 색상 바꾸기
날짜를 선택하면 addDays() 함수를 호출해서 해당 날짜 색상을 바꿈.
#include <QDebug>
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
m_calendarWidget = new QCalenderColorDateWidget(this);
ui->mainVerticalLayout->addWidget(m_calendarWidget);
QObject::connect(m_calendarWidget, SIGNAL(clicked(const QDate&)), this, SLOT(slotCalendarClicked(const QDate&)));
}
MainWindow::~MainWindow()
{
if (nullptr != m_calendarWidget) {
delete m_calendarWidget;
}
delete ui;
}
void MainWindow::slotCalendarClicked(const QDate& d)
{
m_calendarWidget->addDays(d);
}
#include <QPainter>
#include <QDebug>
#include "qcalendercolordatewidget.h"
QCalenderColorDateWidget::QCalenderColorDateWidget(QWidget *parent): QCalendarWidget(parent)
{
}
void QCalenderColorDateWidget::addDays(const QDate &date)
{
if (m_dates.contains(date)) {
m_dates.removeAll(date);
}
else {
m_dates << date;
}
updateCell(date);
}
void QCalenderColorDateWidget::paintCell(QPainter *painter, const QRect &rect, const QDate &date) const
{
if (m_dates.contains(date)) {
qDebug() << date;
painter->save();
painter->setBrush(Qt::red);
painter->drawRect(rect);
painter->drawText(rect, Qt::AlignCenter|Qt::TextSingleLine, QString::number(date.day()));
painter->restore();
}
else {
QCalendarWidget::paintCell(painter, rect, date);
}
}
'놀기 > Qt' 카테고리의 다른 글
[Qt] Widget 크기에 맞게 폰트 조절하기 (feat. QLabel을 QPixmap으로 변환) (0) | 2023.08.27 |
---|---|
[Qt] QMovie로 gif 재생이 안 될 때 ..... (0) | 2023.08.07 |
[QT] 드라이브 목록 출력하기 (QStorageInfo) (0) | 2023.04.05 |
[QT] Json array 읽기 (0) | 2023.03.04 |
[QT] 공백 (whitespace) 제거 (0) | 2023.02.11 |
댓글