Можно ли отключить субботы и воскресенья в QCalendarWidget?

Я хочу, чтобы пользователь мог выбирать понедельник, вторник, среду, четверг или пятницу (рабочие дни) в QCalendarWidget. Но не суббота или воскресенье. (выходные)

  • Доступна ли эта функция для QCalendarWidget?
  • Если нет, то как отключить дату в календаре?

0

Решение

Вы можете написать собственный CalendarWidget и перекрасить ячейку, как хотите. По вашему запросу вы можете проверить date.dayOfWeek() 6 или 7.

В этом примере виджет календаря может изменить цвет выбранной даты, если дата — будние дни, и не изменить, если дата — выходные. Но календарь виджета все еще получает событие clicked, Надеюсь, это поможет.

TestCalendar.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;
};

TestCalendar.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);
}
}

РЕДАКТИРОВАТЬ:

Я добавляю изображение введите описание изображения здесь

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]