Я предполагаю, что вы пытаетесь использовать файл .qss и настраиваете таблицу стилей, используя этот файл.
Разработчики не полностью реализовали использование внешних таблиц стилей с QCalendarWidget, поэтому вам придется немного его взломать.
Я бы предложил добавить в файл .qss константу, которую вы используете, например:
@cons BACKGROUND_COLOR: cyan
Тогда вы можете прочитать из файла в вашем коде:
String color = "";
try {
URL qssFile = getClass().getResource("*PATHNAME*");
Scanner scanner = new Scanner(qssFile.openStream());
String nextLine;
try {
while (scanner.hasNextLine()){
nextLine = scanner.nextLine();
if (nextLine.contains("BACKGROUND_COLOR:")) {
color = nextLine.substring(nextLine.indexOf("BACKGROUND_COLOR:") + 17);
}
}
finally{
scanner.close();
}
} catch (IOException e) {
e.printStackTrace();
}
17 в коде относится к длине BACKGROUND_COLOR: поэтому мы можем получить текст после него.
Далее вы захотите создать новый QColor, установив для него переменный цвет сверху. Затем создайте новый QBrush из QColor. Затем создайте новый QTextCharFormat и установите его фон в QBrush. Наконец, установите формат, вызвав метод setWeekdayTextFormat в QCalendarWidget, передав ему дни недели, которые вы хотите изменить, и формат, который вы хотите изменить. Следующий код устанавливает флажок для каждого дня недели в HorizontalHeader, чтобы иметь цвет фона голубого:
QColor c = new QColor(color);
QBrush b = new QBrush(c);
QTextCharFormat format = new QTextCharFormat();
format.setBackground(b);
this.setWeekdayTextFormat(Qt.DayOfWeek.Sunday, format);
this.setWeekdayTextFormat(Qt.DayOfWeek.Monday, format);
this.setWeekdayTextFormat(Qt.DayOfWeek.Tuesday, format);
this.setWeekdayTextFormat(Qt.DayOfWeek.Wednesday, format);
this.setWeekdayTextFormat(Qt.DayOfWeek.Thursday, format);
this.setWeekdayTextFormat(Qt.DayOfWeek.Friday, format);
this.setWeekdayTextFormat(Qt.DayOfWeek.Saturday, format);
Используйте весь этот код вместе, и у вас есть возможность изменить цвет фона HorizontalHeader с помощью файлов .qss (и более, если хотите).