更改QCalendarWidget的水平标题背景颜色

时间:2011-07-14 21:01:10

标签: qt ubuntu calendar stylesheet qt-jambi

我目前在Ubuntu 11.04 Natty Narwhal中使用Eclipse 3.5.2和Qt Jambi 4.7.2

我有一个目前扩展QCalendarWidget的类。 我正在尝试使用样式表来设置我的日历小部件的样式。现在,我使用QAbstractItemView为背景着色,但它只更改了包含日期的单元格的背景颜色。无论我做什么,包含星期几名称的水平标题片都是白色的。有没有办法使用样式表更改此标题的背景颜色?

任何帮助都将不胜感激。

谢谢。

2 个答案:

答案 0 :(得分:5)

我没有使用低于4.8的版本测试它,但我们遇到了同样的问题,解决方案非常简单。我们使用了这个CSS代码:

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

编辑嗯,请在发布之前阅读 - 我不知道它是否适用于您的子类,但可能值得一试。

答案 1 :(得分:2)

我假设你正在尝试使用.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,将其设置为上面的变量颜色。接下来从QColor创建一个新的QBrush。然后创建一个新的QTextCharFormat并将其背景设置为QBrush。最后,通过调用QCalendarWidget上的setWeekdayTextFormat方法设置格式,将您希望更改的星期几和要更改的格式传递给它。以下代码为Horizo​​ntalHeader中每周的每一天设置框,使背景颜色为青色:

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);

将所有这些代码一起使用,您可以通过使用.qss文件(以及更多,如果您愿意)更改Horizo​​ntalHeader背景颜色。