Qt 状态栏颜色

5 投票
6 回答
12892 浏览
提问于 2025-04-16 16:28

我在用Python做Qt开发,有一个主窗口,底部有一个状态栏。我可以用一个QLabel在状态栏上显示消息,并且可以用类似"<font color=\"green\">In progress</font>"这样的方式来设置消息的颜色。

我还想在状态栏上放一个临时消息,并给这个消息也设置颜色。不过这次我用的是QStatusBar::showMessage,它只接受一个QString类型的字符串,所以我不能再改变颜色了。上面的标签在这里不被识别,整个字符串"<font color=\"green\">In progress</font>"都显示成灰色。

有没有人有什么好主意?

6 个回答

2

如果你的显示消息的文字颜色都是一样的,你可以通过QtDesigner在QStatusBar的调色板里设置窗口文字的颜色,这样临时消息就会使用这个颜色。然后,对于正常的和永久的消息,你可以使用QLabel来设置不同的颜色。

10

要设置QStatusBar的背景色或文字颜色,可以在显示消息之前更改它的样式表:

    self.status.setStyleSheet("QStatusBar{padding-left:8px;background:rgba(255,0,0,255);color:black;font-weight:bold;}")
    self.status.showMessage("Error Cannot determine filepath", msecs= 5000)

初始化的时候,把QStatusBar的messageChanged(QString)连接到一个叫statusChanged()的函数。

    def statusChanged(self, args):
        '''If there are no arguments (the message is being removed) 
        change the background back to transparent/ text back to black'''
        if not args:
            self.status.setStyleSheet("QStatusBar{padding-left:8px;background:rgba(0,0,0,0);color:black;font-weight:bold;}") 

T

4

很遗憾,QStatusBar::showMessage() 不支持富文本格式。很久以前就有人提过这个问题,想要这个功能,但似乎没有引起足够的重视。

我觉得你最好的选择是要么 继续使用普通文本消息,要么 直接操作你现有的 QLabel。这样做需要额外的工作来处理临时状态变化,所以最终决定是否值得就看你自己了。

撰写回答