我知道不支持 QCalendarWidget
QSS
样式,但有谁知道更改 1
和 部分颜色的一些解决方法
? (QCalendarWidget
的 21
部分为浅蓝色,2
部分为白色)
谢谢!
最佳答案
我检查了QCalendarWidget
source code并找到了解决方案。
QCalendarWidget
内部有一个模型和一个显示日期的 View 。 QCalendarModel
有一个 formatForCell(int, int)
函数,它返回给定单元格的 QTextCharFormat
。返回格式是合并 QCalendarView
调色板数据的结果,当天的格式(星期六和星期日以红色显示)和当前日期的格式,可以使用 QCalendarWidget::设置: setDateTextFormat
函数。
实际上一个item的背景是:
format.setBackground(pal.brush(cg, header ? QPalette::AlternateBase : QPalette::Base));
pal
是QCalendarView
的调色板;cg
是一个 color 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 设置颜色您的调色板在事件、非事件等时获取您喜欢的小部件。
关于Qt QCalendarWidget QSS 样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14668344/