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

Posted

技术标签:

【中文标题】更改 QCalendarWidget 的水平标题背景颜色【英文标题】:Change Horizontal Header Background Color of QCalendarWidget 【发布时间】:2011-07-14 21:01:10 【问题描述】:

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

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

任何帮助将不胜感激。

谢谢。

【问题讨论】:

我想知道这是否可能?经过近一个小时的研究,我最好的猜测是记住日期显示在 QTableWidget 上(我相信),并且您想为其编辑 QHeaderView(特别是 paintSection 方法)。希望有人可以来购买并对此进行更多说明。 我想你最好为此要求 Ct/cpp 解决方案;我怀疑占碑的实现会有所不同,如果不同,那就戳我……我会看看它是否可以修复:) 【参考方案1】:

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

QWidget#qt_calendar_navigationbar

    background-color: #424242;
    border: 1px solid #4f4f4f;

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

【讨论】:

如果您将 QCalendarWidget 添加到 QGraphicsScene,似乎在 Qt 5.1.1 中不起作用。类似于:m_QGraphicsScene->addWidget(new QCalendarWidget, Qt::Window);【参考方案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 背景颜色(如果您愿意,还可以使用更多)。

【讨论】:

以上是关于更改 QCalendarWidget 的水平标题背景颜色的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 SQL 数据库更改 QCalendarWidget 中单元格的背景颜色

Qt QCalendarWidget QSS 样式

PyQt5-Qt Designer日历(QCalendarWidget)

Qt入门系列开发教程基础控件篇QCalendarWidget日历控件

PyQt:当单元格进入 QCalendarWidget 时发出信号

我想把文本放在 pyqt QCalendarWidget