继承 QCalendarWidget 时 paintCell() 函数中的 Painter 错误

Painter error in paintCell() function when subclassing QCalendarWidget

我想创建日历,它会标记用户输入的几个日期。 所以我将 QCalendarWidget 子类化并重新实现了 painCell 函数。 这是我的简化代码:

MyCalendar::MyCalendar(QWidget *parent)
    : QCalendarWidget(parent)
{   
    painter = new QPainter(this);   
}
void MyCalendar::setHolidays(QDate date)
{
    paintCell(painter, rect(),date);        
}

void MyCalendar::paintCell(QPainter * painter, const QRect & rect, const QDate & date) const
{
    painter->setBrush(Qt::red);
    QCalendarWidget::paintCell(painter, rect, date);
}

不过我做不到,因为在创建 QPainter 对象时我收到了这条消息: “QWidget::paintEngine:不应再调用 QPainter::begin:绘画设备返回引擎 == 0,类型:1

当我没有设置 painter parent 时,我在尝试设置画笔时遇到此错误: "QPainter::setBrush: Painter not active" 我想,我在错误的地方创建了 QPainter 对象。 任何人都知道,如何解决这个问题?

我正在使用 Qt wiki 片段: https://wiki.qt.io/How_to_create_a_custom_calender_widget

不要直接绘制,内部调用了paintCell方法,将日期保存在一个列表中比较合适,如果paintCell使用的日期包含在该列表中,则以个性化方式绘制:

#ifndef MYCALENDAR_H
#define MYCALENDAR_H

#include <QCalendarWidget>
#include <QPainter>
class MyCalendar : public QCalendarWidget
{
public:
    MyCalendar(QWidget *parent=Q_NULLPTR):QCalendarWidget{parent}{

    }
    void addHoliday(const QDate &date){
        mDates<<date;
        updateCell(date);
    }
    void paintCell(QPainter * painter, const QRect & rect, const QDate & date) const{
        if(mDates.contains(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);

    }
private:
    QList<QDate> mDates;
};

#endif // MYCALENDAR_H