继承 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
我想创建日历,它会标记用户输入的几个日期。 所以我将 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