如何在 QDateEdit 或 QCalendarWidget 中更改非活动日的颜色
How to change color for inactive days in QDateEdit or QCalendarWidget
朋友们请帮帮我!我需要日历小部件如下所示:
desired calendar
但是我有一个问题。我只得到这个:
my calendar
我需要这样做:超出范围的日期(minimalDate、maximumDate)应该被着色为不活动(例如,活动日期的主色是黑色,非活动日期的主色是灰色)。抱歉我的英语不好:)
我试着这样写:
/* activel days */
QCalendarWidget QAbstractItemView:enabled
{
font-size:24px;
color: rgb(180, 180, 180);
background-color: black;
selection-background-color: rgb(64, 64, 64);
selection-color: rgb(0, 255, 0);
}
/* days inactive */
QCalendarWidget QAbstractItemView:disabled { color: rgb(64, 64, 64); }
您应该创建自己的自定义日历 class 从 QCalendarWidget
派生并重新实现 void QCalendarWidget::paintCell(QPainter *painter, const QRect &rect, const QDate &date) const
方法。
所以让我们在 Calendar.h:
中创建一个 Calendar
class
#include <QCalendarWidget>
class Calendar : public QCalendarWidget
{
public:
Calendar(QWidget *parent = nullptr);
void paintCell(QPainter *painter, const QRect &rect, const QDate &date) const override;
};
在 Calendar.cpp 中实施 class:
#include "Calendar.h"
#include <QPainter>
Calendar::Calendar(QWidget *parent)
: QCalendarWidget(parent)
{}
void Calendar::paintCell(QPainter *painter, const QRect &rect, const QDate &date) const
{
// change color for dates before current date
if (date < QDate::currentDate())
{
painter->save();
// set color for the text
painter->setPen(QColor(64, 64, 64));
// draw text with new color
painter->drawText(rect, Qt::TextSingleLine | Qt::AlignCenter, QString::number(date.day()));
// here you can draw anything you want
painter->restore();
} else {
// draw cell in standard way
QCalendarWidget::paintCell(painter, rect, date);
}
}
之后,如果您正在使用 Qt Creator,您可以将左侧栏中的 QCalendarWidget
添加到您的小部件,右键单击它并打开 升级到菜单。将 Calendar
添加到 Promoted class 名称 并检查 头文件 是否正确。点击 Add 将 Calendar
添加到提升的 classes 列表中,最后点击 Promote 将 QCalendarWidget
在你的表单上变成 Calendar
.
之后我得到以下小部件(对不起俄语):
朋友们请帮帮我!我需要日历小部件如下所示: desired calendar
但是我有一个问题。我只得到这个: my calendar
我需要这样做:超出范围的日期(minimalDate、maximumDate)应该被着色为不活动(例如,活动日期的主色是黑色,非活动日期的主色是灰色)。抱歉我的英语不好:)
我试着这样写:
/* activel days */
QCalendarWidget QAbstractItemView:enabled
{
font-size:24px;
color: rgb(180, 180, 180);
background-color: black;
selection-background-color: rgb(64, 64, 64);
selection-color: rgb(0, 255, 0);
}
/* days inactive */
QCalendarWidget QAbstractItemView:disabled { color: rgb(64, 64, 64); }
您应该创建自己的自定义日历 class 从 QCalendarWidget
派生并重新实现 void QCalendarWidget::paintCell(QPainter *painter, const QRect &rect, const QDate &date) const
方法。
所以让我们在 Calendar.h:
中创建一个Calendar
class
#include <QCalendarWidget>
class Calendar : public QCalendarWidget
{
public:
Calendar(QWidget *parent = nullptr);
void paintCell(QPainter *painter, const QRect &rect, const QDate &date) const override;
};
在 Calendar.cpp 中实施 class:
#include "Calendar.h"
#include <QPainter>
Calendar::Calendar(QWidget *parent)
: QCalendarWidget(parent)
{}
void Calendar::paintCell(QPainter *painter, const QRect &rect, const QDate &date) const
{
// change color for dates before current date
if (date < QDate::currentDate())
{
painter->save();
// set color for the text
painter->setPen(QColor(64, 64, 64));
// draw text with new color
painter->drawText(rect, Qt::TextSingleLine | Qt::AlignCenter, QString::number(date.day()));
// here you can draw anything you want
painter->restore();
} else {
// draw cell in standard way
QCalendarWidget::paintCell(painter, rect, date);
}
}
之后,如果您正在使用 Qt Creator,您可以将左侧栏中的 QCalendarWidget
添加到您的小部件,右键单击它并打开 升级到菜单。将 Calendar
添加到 Promoted class 名称 并检查 头文件 是否正确。点击 Add 将 Calendar
添加到提升的 classes 列表中,最后点击 Promote 将 QCalendarWidget
在你的表单上变成 Calendar
.
之后我得到以下小部件(对不起俄语):