Qt QCalendarWidget QSS Styling

时间:2013-02-03 00:54:01

标签: qt qt4 qtstylesheets

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

enter image description here

谢谢!

2 个答案:

答案 0 :(得分:6)

我已经检查了QCalendarWidget source code并找到了解决方案。

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

实际上项目的背景是:

format.setBackground(pal.brush(cg, header ? QPalette::AlternateBase : QPalette::Base));
  • palQCalendarView的调色板;
  • cgcolor group;
  • 当前单元格是标题单元格时,
  • 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部分为绿色。 此外,您可以为每个color group调色板设置颜色,以便在活动,非活动等时获取您喜欢的小部件。

答案 1 :(得分:1)

区域&#34; 1&#34;定制:

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

区域&#34; 2&#34; 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 - d->m_view->setObjectName(QLatin1String("qt_calendar_calendarview"));qcalendarwidget.cpp的对象名称