PowerMaster/source/customCalendarWidget.cpp

132 lines
4.4 KiB
C++
Raw Normal View History

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);
}
void CustomCalendarWidget::paintEvent(QPaintEvent *event)
{
QTableView *view = this->findChild<QTableView*>("qt_calendar_calendarview");
if (view)
{
QPainter painter(view);
painter.setPen(QColor(250, 250, 250)); // 设置字体颜色为红色
}
}
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();
}
}