效果图
样式表
详细用法可在网上搜索帖子
/*星期*/
QCalendarWidget QTableView {
alternate-background-color: #24344c;
color: #dddddd; /*font color*/
}
/* 所有背景 */
#qt_calendar_calendarview {
background-color: #24344c;
}
#qt_calendar_calendarview:disabled {
background-color: #332c7dce;
}
/*可用日期*/
QCalendarWidget QAbstractItemView:enabled {
color: #dddddd;
selection-color: #dddddd; /* select: font color */
/*selection-background-color: #2c7dce; */ /* select: background color */
}
/*不可用日期*/
QCalendarWidget QAbstractItemView:disabled {
color: #66dddddd;
}
/*下一月按钮*/
QToolButton#qt_calendar_prevmonth{
icon-size: 18px;
qproperty-icon: url(:/primary/calendar_prevmonth.svg);
}
/*上一月按钮*/
QToolButton#qt_calendar_nextmonth{
icon-size: 18px;
qproperty-icon: url(:/primary/calendar_nextmonth.svg);
}
QToolButton#qt_calendar_prevmonth:disabled{
icon-size: 18px;
qproperty-icon: url(:/disabled/calendar_prevmonth.svg);
}
QToolButton#qt_calendar_nextmonth:disabled{
icon-size: 18px;
qproperty-icon: url(:/disabled/calendar_nextmonth.svg);
}
定制日期三角区域及选中样式
class MyCalendarWidget : public QCalendarWidget
{
Q_OBJECT
public:
HCalendarWidget(QWidget *parent = nullptr);
~HCalendarWidget();
...
protected:
void paintCell(QPainter* painter, const QRect& rect, const QDate& date) const Q_DECL_OVERRIDE;
private:
//日期标记
int m_signYear = 0;
int m_signMonth = 0;
int m_signDays = 0;
QColor m_signColor;
//选中
QColor m_selectFgColor;
QColor m_selectBgColor;
};
void MyCalendarWidget::paintCell(QPainter* painter, const QRect& rect, const QDate& date) const
{
QCalendarWidget::paintCell(painter, rect, date);
if (date.year() == m_signYear && date.month() == m_signMonth)
{
if ((0x01 << (date.day()-1)) & m_signDays)
{
painter->save();
painter->setRenderHint(QPainter::Antialiasing);
QPainterPath path;
path.moveTo(rect.right(), rect.bottom() - TRIANGLE_SIDE_LEN);
path.lineTo(rect.right(), rect.bottom());
path.lineTo(rect.right() - TRIANGLE_SIDE_LEN, rect.bottom());
painter->setBrush(m_signColor);
painter->setPen(m_signColor);
painter->drawPath(path);
painter->restore();
painter->save();
painter->drawText(rect, Qt::AlignCenter, QString::number(date.day()));
painter->restore();
}
}
if (date == selectedDate())
{
painter->save();
painter->setRenderHint(QPainter::Antialiasing);
painter->setBackground(m_selectBgColor);
painter->setPen(m_selectFgColor);
painter->drawText(rect, Qt::AlignCenter, QString::number(date.day()));
painter->restore();
}
}