2024-10-10 16:59:51 +08:00
|
|
|
|
#include "customCalendarWidget.h"
|
|
|
|
|
|
|
|
|
|
|
|
#include <QTableView>
|
|
|
|
|
|
#include <QLocale>
|
|
|
|
|
|
#include <QPainter>
|
|
|
|
|
|
#include <QTextCharFormat>
|
|
|
|
|
|
#include <QHeaderView>
|
|
|
|
|
|
|
|
|
|
|
|
CustomCalendarWidget::CustomCalendarWidget(QWidget *parent)
|
|
|
|
|
|
: QCalendarWidget(parent)
|
|
|
|
|
|
{
|
|
|
|
|
|
setWindowFlags(Qt::FramelessWindowHint);
|
|
|
|
|
|
//setAttribute(Qt::WA_TranslucentBackground);
|
|
|
|
|
|
|
|
|
|
|
|
initialize();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
CustomCalendarWidget::~CustomCalendarWidget()
|
|
|
|
|
|
{
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
void CustomCalendarWidget::initialize()
|
|
|
|
|
|
{
|
|
|
|
|
|
setLocale(QLocale(QLocale::Chinese));
|
|
|
|
|
|
setNavigationBarVisible(false);
|
|
|
|
|
|
setVerticalHeaderFormat(QCalendarWidget::NoVerticalHeader);
|
|
|
|
|
|
setHorizontalHeaderFormat(QCalendarWidget::SingleLetterDayNames);
|
|
|
|
|
|
setSelectionMode(SingleSelection);
|
|
|
|
|
|
//qss中设置无效,需要这里获取具体子部件做全透明,然后在外部创建对象处设置需要的透明值,eg:obj->setStyleSheet("background-color:rgba(32,47,62,150);");
|
|
|
|
|
|
QTableView *view = this->findChild<QTableView*>("qt_calendar_calendarview");
|
|
|
|
|
|
if (view)
|
|
|
|
|
|
{
|
|
|
|
|
|
view->setStyleSheet("QTableView{color:rgb(250,250,250);}");
|
|
|
|
|
|
//view->horizontalHeader()->setStyleSheet("QHeaderView::section{background-color:transparent;color:rgb(250,250,250);}");
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
QTextCharFormat format;
|
|
|
|
|
|
QFont font;
|
|
|
|
|
|
font.setFamily("微软雅黑");
|
|
|
|
|
|
font.setPointSize(12);
|
|
|
|
|
|
format.setFont(font);
|
|
|
|
|
|
//format.setForeground(QBrush(QColor(250, 250, 250))); //QT6下通过设置前景色无效,需要通过上面用setStyleSheet实现
|
|
|
|
|
|
format.setBackground(Qt::transparent);
|
|
|
|
|
|
setHeaderTextFormat(format);
|
|
|
|
|
|
|
|
|
|
|
|
// QTextCharFormat formatWeekday;
|
|
|
|
|
|
// formatWeekday.setForeground(QBrush(QColor(250, 250, 250)));
|
|
|
|
|
|
// formatWeekday.setBackground(Qt::transparent);
|
|
|
|
|
|
// setWeekdayTextFormat(Qt::Saturday, formatWeekday);
|
|
|
|
|
|
// setWeekdayTextFormat(Qt::Sunday, formatWeekday);
|
|
|
|
|
|
// setWeekdayTextFormat(Qt::Monday, formatWeekday);
|
|
|
|
|
|
// setWeekdayTextFormat(Qt::Tuesday, formatWeekday);
|
|
|
|
|
|
// setWeekdayTextFormat(Qt::Wednesday, formatWeekday);
|
|
|
|
|
|
// setWeekdayTextFormat(Qt::Thursday, formatWeekday);
|
|
|
|
|
|
// setWeekdayTextFormat(Qt::Friday, formatWeekday);
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-10-10 19:43:26 +08:00
|
|
|
|
// void CustomCalendarWidget::paintEvent(QPaintEvent *event)
|
|
|
|
|
|
// {
|
|
|
|
|
|
// }
|
2024-10-10 16:59:51 +08:00
|
|
|
|
|
|
|
|
|
|
void CustomCalendarWidget::paintCell(QPainter *painter, const QRect &rect, QDate date) const
|
|
|
|
|
|
{
|
|
|
|
|
|
if (date == selectedDate())
|
|
|
|
|
|
{
|
|
|
|
|
|
painter->save();
|
|
|
|
|
|
painter->setRenderHint(QPainter::Antialiasing);
|
|
|
|
|
|
//背景
|
|
|
|
|
|
painter->setPen(Qt::NoPen);
|
|
|
|
|
|
painter->setBrush(QColor(76, 86, 102, 220));
|
|
|
|
|
|
painter->drawRoundedRect(rect.x(), rect.y(), rect.width(), rect.height(), 2, 2);
|
|
|
|
|
|
//文字
|
|
|
|
|
|
painter->setPen(QColor(250, 250, 250));
|
|
|
|
|
|
QFont font;
|
|
|
|
|
|
font.setFamily("微软雅黑");
|
|
|
|
|
|
font.setPointSize(11);
|
|
|
|
|
|
painter->setFont(font);
|
|
|
|
|
|
painter->drawText(rect, Qt::AlignCenter, QString::number(date.day()));
|
|
|
|
|
|
painter->restore();
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (date == QDate::currentDate())
|
|
|
|
|
|
{
|
|
|
|
|
|
painter->save();
|
|
|
|
|
|
painter->setRenderHint(QPainter::Antialiasing);
|
|
|
|
|
|
//文字
|
|
|
|
|
|
painter->setPen(QColor(90, 188, 231));
|
|
|
|
|
|
QFont font;
|
|
|
|
|
|
font.setFamily("微软雅黑");
|
|
|
|
|
|
font.setPointSize(12);
|
|
|
|
|
|
font.setBold(true);
|
|
|
|
|
|
painter->setFont(font);
|
|
|
|
|
|
painter->drawText(rect, Qt::AlignCenter, QString::number(date.day()));
|
|
|
|
|
|
painter->restore();
|
|
|
|
|
|
}
|
|
|
|
|
|
else if (date > QDate::currentDate())
|
|
|
|
|
|
{
|
|
|
|
|
|
painter->save();
|
|
|
|
|
|
painter->setRenderHint(QPainter::Antialiasing);
|
|
|
|
|
|
//文字
|
|
|
|
|
|
painter->setPen(QColor(150, 150, 150));
|
|
|
|
|
|
QFont font;
|
|
|
|
|
|
font.setFamily("微软雅黑");
|
|
|
|
|
|
font.setPointSize(11);
|
|
|
|
|
|
font.setBold(true);
|
|
|
|
|
|
painter->setFont(font);
|
|
|
|
|
|
painter->drawText(rect, Qt::AlignCenter, QString::number(date.day()));
|
|
|
|
|
|
painter->restore();
|
|
|
|
|
|
}
|
|
|
|
|
|
else
|
|
|
|
|
|
{
|
|
|
|
|
|
//QCalendarWidget::paintCell(painter, rect, date);
|
|
|
|
|
|
painter->save();
|
|
|
|
|
|
painter->setRenderHint(QPainter::Antialiasing);
|
|
|
|
|
|
//文字
|
|
|
|
|
|
painter->setPen(QColor(250, 250, 250));
|
|
|
|
|
|
QFont font;
|
|
|
|
|
|
font.setFamily("微软雅黑");
|
|
|
|
|
|
font.setPointSize(11);
|
|
|
|
|
|
painter->setFont(font);
|
|
|
|
|
|
painter->drawText(rect, Qt::AlignCenter, QString::number(date.day()));
|
|
|
|
|
|
painter->restore();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|