首先创建一个新类XCalendar继承QCalendarWidget类,然后在UI视图设计器中把日历提升为XCalendar,通过这个函数自己设置日历的样式
xcalendar.h
#pragma once
#include <QCalendarWidget>
class XCalendar :public QCalendarWidget
{
public:
XCalendar(QWidget* p);
void paintCell(QPainter* painter,
const QRect& rec,
const QDate& date) const override;
};
xcalendar.cpp
#include "xcalendar.h"
#include <QPainter>
XCalendar::XCalendar(QWidget* p) :QCalendarWidget(p)
{
}
void XCalendar::paintCell(QPainter* painter,
const QRect& rec,
const QDate& date) const
{
//有视频的日期特殊显示
//测试日期 4号
if (date.day() != 4)
{
QCalendarWidget::paintCell(painter, rec, date);
return;
}
auto font = painter->font();
//设置4号日期的字体
font.setPixelSize(30);//setFont的时候传入的参数,
//选中状态刷背景色
if (date == selectedDate())
{
painter->setBrush(QColor(118, 178, 224));//刷子蓝色颜色,任意填充将使用这个颜色
painter->drawRect(rec); //绘制背景
}
painter->setFont(font); //设置字体和颜色
painter->setPen(QColor(255, 0, 0)); //字颜色
painter->drawText(rec, Qt::AlignCenter,
QString::number(date.day()));
}
paintCell
是一个虚函数,用于在 Qt 框架中自定义绘制日历部件(如 QCalendarWidget
)中的单元格。通过重载该函数,可以控制单元格的外观和内容。