多路h265监控录放开发-(14)通过PaintCell自定义日历控件继承QCalendarWidget的XCalendar类

首先创建一个新类XCalendar继承QCalendarWidget类,然后在UI视图设计器中把日历提升为XCalendar,通过这个函数自己设置日历的样式

xcalendar.h

cpp 复制代码
#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

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)中的单元格。通过重载该函数,可以控制单元格的外观和内容。

相关推荐
RTC实战笔记3 天前
实时互动数字人怎么做,才不是一个只会说话的视频?
音视频·数字人·rtc·数字人接入
用户805533698034 天前
不止三件套:QObject 属性系统全关键字与运行时反射!
c++·qt
xcyxiner4 天前
DicomViewer (vcpkg Windows和ubuntu编译)7
qt
Quz9 天前
QML Hello World 入门示例
qt
xcyxiner12 天前
DicomViewer (dcmtk读取dcm文件)5
qt
xcyxiner13 天前
DicomViewer (后台线程处理文件)4
qt
xcyxiner13 天前
DicomViewer (添加模型类)3
qt
xcyxiner14 天前
DicomViewer (目录调整) 2
qt
xcyxiner14 天前
dcmtk vtk vtk-dicom(gdcm) 编译(debug) v2
qt
RTC实战笔记15 天前
Android 实时音视频接入教程:媒体补充增强信息(SEI)
音视频·媒体·rtc