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

Qt 更改QCalendarWidget的水平标题背景色,qt,ubuntu,calendar,stylesheet,qt-jambi,Qt,Ubuntu,Calendar,Stylesheet,Qt Jambi,我目前正在Ubuntu 11.04 Natty Narhall中使用Eclipse3.5.2和QtJambi4.7.2 我有一个类当前扩展了QCalendarWidget。 我正在尝试使用样式表来设置日历小部件的样式。现在,我正在使用QAbstractItemView为背景着色,但它只会更改单元格中包含日期的背景色。无论我做什么,包含一周中几天名称的水平标题部分都保持白色。有没有办法使用样式表更改此标题的背景色 任何帮助都将不胜感激 谢谢。我假设您正在尝试使用.qss文件并使用该文件设置样式表

我目前正在Ubuntu 11.04 Natty Narhall中使用Eclipse3.5.2和QtJambi4.7.2

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

任何帮助都将不胜感激


谢谢。

我假设您正在尝试使用.qss文件并使用该文件设置样式表

开发人员没有在QCalendarWidget中完全实现外部样式表的使用,因此您必须对其进行一些修改

我建议您在.qss文件中添加一个常量,您使用的是以下内容:

@cons背景颜色:青色

然后,您可以从代码中的文件中读取:

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表示背景颜色的长度:因此我们可以得到它后面的文本

接下来,您需要创建一个新的QColor,从上面将其设置为可变颜色。接下来从QColor创建一个新的QBrush。然后创建一个新的QTextCharFormat并将其背景设置为QBrush。最后,通过调用QCalendarWidget上的setWeekdayTextFormat方法来设置格式,并将您希望更改的日期和格式传递给它。下面的代码将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);

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

我没有使用低于4.8的版本对其进行测试,但我们遇到了相同的问题,解决方案非常简单。我们使用了以下CSS代码:

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

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

我想知道这是否可能?经过近一个小时的研究,我的最佳猜测是记住日期显示在QTableWidget上(我相信),并且您希望为其编辑QHeaderView(特别是paintSection方法)。希望有人能来购买,并在这方面提供更多的信息。我想你最好是要求Ct/cpp解决方案;我怀疑Jambi实现是否会有所不同,如果它有所不同,请戳我一下。。。我将看看它是否可以修复:)如果您将QCalendarWidget添加到QGraphicscene中,它在Qt5.1.1中似乎不起作用。类似于:m_qgraphicscene->addWidget(新的QCalendarWidget,Qt::Window);