Изменить цвет фона горизонтального заголовка QCalendarWidget - PullRequest
3 голосов
/ 15 июля 2011

В настоящее время я использую Eclipse 3.5.2 и Qt Jambi 4.7.2 в Ubuntu 11.04 Natty Narwhal

У меня есть класс, который в настоящее время расширяет QCalendarWidget.Я пытаюсь использовать таблицы стилей для стилизации своего виджета календаря.Прямо сейчас я использую QAbstractItemView для окрашивания фона, но он только изменяет цвет фона ячеек с датами в них.Горизонтальный заголовок, который содержит названия дней недели, остается белым, независимо от того, что я делаю.Есть ли способ изменить цвет фона этого заголовка с помощью таблицы стилей?

Буду признателен за любую помощь.

Спасибо.

Ответы [ 2 ]

5 голосов
/ 18 апреля 2012

Я не тестировал его с версиями ниже 4.8, но у нас была та же проблема, и решение было довольно простым. Мы использовали этот код CSS:

QWidget#qt_calendar_navigationbar
{
    background-color: #424242;
    border: 1px solid #4f4f4f;
}

edit: Что ж, прочитайте, прежде чем публиковать - я не знаю, работает ли он в вашем подклассе, но, возможно, стоит попробовать.

2 голосов
/ 20 июля 2011

Я предполагаю, что вы пытаетесь использовать файл .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 (и более, если хотите).

...