5

我正在将 Qt 与 Python 一起使用,并且我有一个底部带有状态栏的主窗口。我可以使用 QLabel 在栏中显示一条消息,并使用类似"<font color=\"green\">In progress</font>"QLabel 文本的方式设置该消息的颜色。

我还想在状态栏中放置一条临时消息,并为该消息分配颜色。但是,由于这次不是 QLabel(我使用的是 QStatusBar::showMessage,它只需要一个 QString)我不能再改变颜色了。上面的标签无法识别,整个字符串"<font color=\"green\">In progress</font>"显示为灰色。

有没有人有任何想法?

4

6 回答 6

10

要为 QStatusBar 设置背景或文本颜色,请在显示消息之前将其更改为 styleSheet:

    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)

init上,将 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;}") 

于 2013-11-28T21:19:47.083 回答
4

不幸的是,不支持富文本格式。这甚至在很久以前就被报告为功能请求,但似乎没有得到足够的关注。QStatusBar::showMessage()

我认为你最好的选择是要么坚持纯文本消息,要么直接操纵你现有的 QLabel消息。这将需要一些额外的工作来处理临时状态更改,因此由您决定是否值得麻烦。

于 2011-04-26T19:53:59.627 回答
2

如果你的 showMessages 文本都是相同的颜色,你可以通过 QtDesigner(window text color) 在 QStatusBar 的调色板中为临时消息定义它,然后为不同颜色的正常和永久消息使用 QLabel 颜色。

于 2012-07-23T17:58:48.453 回答
2

到目前为止,我能为这个问题找到的最短解决方案:

    ui->statusBar->setStyleSheet("color: red");
    ui->statusBar->showMessage("Your error message", 2000);
    QTimer::singleShot(2000, [this]{ ui->statusBar->setStyleSheet("color: black"); }); 

虽然它不是 100% 干净的 - 如果在计时器运行时间的 2 秒内触发了另一条此类消息,则颜色可能过早变回。但在实践中,这几乎没有任何意义。

于 2017-02-08T07:38:24.133 回答
0

您还可以子类化QStatusBar并实现“彩色”状态消息,例如(在 C++ 中):

class QStatusBarX : public QStatusBar
{
  public:

  QStatusBarX::QStatusBarX(QWidget * parent = 0)
  {
  }

  QStatusBarX::~QStatusBarX(void)
  {
  }

  void showMessageGreen(const QString & message)
  {
    this->setStyleSheet("color: green");
    this->showMessage(message);
  }
};
于 2017-01-25T10:00:12.643 回答
0

Python中使用

self.statusBar().setStyleSheet("color : pink") 
于 2021-01-07T01:05:19.423 回答