我希望用户能够在 QCalendarWidget 中选择星期一、星期二、星期三、星期四或星期五(工作日)。但不是周六或周日。(周末)
- 此功能可用于 QCalendarWidget 吗?
- 如果没有,如何禁用日历上的日期?
我希望用户能够在 QCalendarWidget 中选择星期一、星期二、星期三、星期四或星期五(工作日)。但不是周六或周日。(周末)
您可以编写自定义 CalendarWidget 并根据需要重新绘制单元格。根据您的要求,您可以检查date.dayOfWeek()
6 或 7。
在此示例中,如果日期是工作日,日历小部件可以更改所选日期的颜色,如果日期是周末,则不会更改。但是,小部件日历仍然得到 event clicked
。希望这有帮助。
测试日历.h
class TestCalendar: public QCalendarWidget//: public QWidget//
{
Q_OBJECT
Q_PROPERTY(QColor color READ getColor WRITE setColor)
public:
TestCalendar(QWidget* parent = 0);//();//
~TestCalendar();
void setColor(QColor& color);
QColor getColor();
protected:
virtual void paintCell(QPainter* painter, const QRect &rect, const QDate &date) const;
private:
QDate m_currentDate;
QPen m_outlinePen;
QBrush m_transparentBrush;
};
测试日历.cpp
#include <QtWidgets>
#include "TestCalendar.h"
TestCalendar::TestCalendar(QWidget *parent)
: QCalendarWidget(parent)
{
m_currentDate = QDate::currentDate();
m_outlinePen.setColor(Qt::blue);
m_transparentBrush.setColor(Qt::transparent);
}
TestCalendar::~TestCalendar()
{
}
void TestCalendar::setColor(QColor &color)
{
m_outlinePen.setColor(color);
}
QColor TestCalendar::getColor()
{
return m_outlinePen.color();
}
void TestCalendar::paintCell(QPainter *painter, const QRect &rect, const QDate &date) const
{
if (date.dayOfWeek() == 6 or date.dayOfWeek() == 7) {
painter->save();
painter->drawText(rect, Qt::AlignCenter,QString::number(date.day()));
painter->restore();
} else {
QCalendarWidget::paintCell(painter, rect, date);
}
}
编辑: