2

我知道不支持QCalendarWidget QSS样式,但有人知道更改部分颜色的一些变通方法1吗?(部分为浅蓝色,部分为白色)2QCalendarWidget12

在此处输入图像描述

谢谢!

4

2 回答 2

6

我检查了QCalendarWidget 源代码并找到了解决方案。

QCalendarWidget内部有一个模型和一个视图来显示天数。QCalendarModel有一个formatForCell(int, int)返回QTextCharFormat给定单元格的函数。返回格式是合并QCalendarView调色板数据的结果,当前日期的格式(星期六和星期日以红色显示)和当前日期的格式,可以使用QCalendarWidget::setDateTextFormat函数设置。

实际上一个项目的背景是:

format.setBackground(pal.brush(cg, header ? QPalette::AlternateBase : QPalette::Base));
  • pal是 aQCalendarView的调色板;
  • cg是一个颜色组
  • header当当前单元格是标题单元格时为真(示例中的第 1 节)

因此,您只需将自定义调色板设置为该内部QCalendarView. 在源代码中,我们可以发现该QCalendarView对象有一个名称“qt_calendar_calendarview”,我们可以使用它:

QCalendarWidget *c = new QCalendarWidget;

QTableView *view = c->findChild<QTableView*>("qt_calendar_calendarview");
if (view)
{
    QPalette pal = view->palette();
    pal.setColor(QPalette::Base, Qt::red);
    pal.setColor(QPalette::AlternateBase, Qt::green);
    view->setPalette(pal);
}

在我的示例中,第 1 部分为红色,第 2 部分为绿色。此外,您可以为调色板的每个颜色组设置颜色,以获得您喜欢的小部件,当它处于活动状态、非活动状态等时。

于 2013-02-06T13:38:04.240 回答
2

区域“1”定制:

QTextCharFormat format;
format.setForeground(QBrush(Qt::blue));
format.setBackground(QBrush(Qt::red);
ui->calendarWidget->setHeaderTextFormat(format);

区域“2”QSS CSS:

QCalendarWidget QAbstractItemView
{
background-color: rgb(192,192,192); /* цвет фона текущего месяца */
selection-background-color: yellow; /* цвет фона выбранного дня */
selection-color: black; /* цвет текста выбранного дня */
}

或者

#qt_calendar_calendarview
{
background-color: rgb(192,192,192); /* цвет фона текущего месяца */
selection-background-color: yellow; /* цвет фона выбранного дня */
selection-color: black; /* цвет текста выбранного дня */
}

, where - 来自in#qt_calendar_calendarview的对象名称d->m_view->setObjectName(QLatin1String("qt_calendar_calendarview"));qcalendarwidget.cpp

于 2017-03-10T07:38:52.680 回答