Qt QCalendarWidget QSS样式化

3
我知道QCalendarWidget没有支持QSS样式,但有没有人知道如何更改QCalendarWidget的第1和第2节的颜色的解决方法?(第1节是浅蓝色,第2节是白色)谢谢!

enter image description here
2个回答

6
我已查看了 QCalendarWidget 源代码 并找到了解决方法。 QCalendarWidget 内部有一个模型和一个视图来显示日期。 QCalendarModel 有一个名为 formatForCell(int, int) 的函数,用于返回给定单元格的 QTextCharFormat。返回的格式是合并了 QCalendarView 调色板数据、当前日期(星期六和星期日以红色显示)的格式和可以使用 QCalendarWidget::setDateTextFormat 函数设置的当前日期格式的结果。
实际上,项目的背景是:
format.setBackground(pal.brush(cg, header ? QPalette::AlternateBase : QPalette::Base));
  • palQCalendarView 的调色板;
  • cg颜色组
  • header 为 true 时,当前单元格是标题单元格(例如你的示例中的第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部分将是绿色的。 此外,您可以为您调色板的每个颜色组设置颜色,以便在激活、非激活等状态下获得您喜欢的小部件。


3

区域“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; /* цвет текста выбранного дня */
}

其中,#qt_calendar_calendarview是从qcalendarwidget.cpp中的d->m_view->setObjectName(QLatin1String("qt_calendar_calendarview"));设置对象名称。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接