Qt的QCalendarWidget QSS造型(Qt QCalendarWidget QSS St

2019-08-16 17:25发布

我知道有没有用于支持QCalendarWidget QSS造型,但没有人知道一些解决方法改变截面的颜色12中的QCalendarWidget ? (浅蓝色为第1和白色部分2

谢谢!

Answer 1:

我已经研究QCalendarWidget 的源代码 ,并找到了解决办法。

QCalendarWidget内部具有模型和显示天的图。 QCalendarModel具有formatForCell(int, int)它返回功能QTextCharFormat对于给定的小区。 返回格式是合并的结果QCalendarView ,对于当前日期的格式(星期六和星期日以红色显示)的调色板数据和当前日期的格式,其可以使用被设置QCalendarWidget::setDateTextFormat功能。

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

format.setBackground(pal.brush(cg, header ? QPalette::AlternateBase : QPalette::Base));
  • palQCalendarView的调色板;
  • 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节将是绿色的。 此外,您可以设置每个颜色的色组的调色板,你得到你喜欢当它活跃,不活跃等小部件



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

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



文章来源: Qt QCalendarWidget QSS Styling