QCalendarWidget 选择颜色

QCalendarWidget selection color

我有一个 QCalendarWidget 并且一个月中的某些天是彩色的(例如假期是红色的)。当我 select 一天有颜色时, selection 清除颜色,我看不到它的原始颜色。但是当我那天 deselect - 颜色又回来了。请看图片

有没有办法即使一天 select 也能保持颜色?我知道有一种方法可以为 QTableView 的代表执行此操作,但我找不到 QCalendarWidget 的类似方法。有任何想法吗?谢谢你的时间。

您可以像这样访问日历小部件的内部 QTableView 对象:

QCalendarWidget *c = new QCalendarWidget;

QTableView *view = c->findChild<QTableView*>("qt_calendar_calendarview");
if (view)
{
    view->setItemDelegate(new MySuperCalendarDelegate);
}

然后您可以使用自定义代理来设置正确的背景色和前景色。

您还可以检查 my previous answer QCalendarWidget 样式。

我知道已经一年多了,如果我正确理解了这个问题,我想我找到了更好的解决方案。在我的例子中,每次 selected 日期,我将日期设置为黄色,执行以下操作:

QTextCharFormat fmt;
fmt.setBackground(Qt::yellow);
m_ui->calender->setDateTextFormat(date, fmt);

那一次我还设置了 QCalenderWidget 的样式表,如下所示:

setStyleSheet("QTableView{selection-background-color: yellow}")

如果我需要取消select,我将日期颜色设置为原来的白色,并执行以下操作:

setStyleSheet("QTableView{selection-background-color: yellow}")

这很适合我。