Цвет строки состояния Qt - PullRequest
2 голосов
/ 26 апреля 2011

Я использую Qt с Python, и у меня есть главное окно со строкой состояния внизу. Я могу отобразить сообщение на панели, используя QLabel, и установить цвет этого сообщения, используя что-то вроде "<font color=\"green\">In progress</font>" для текста QLabel.

Я бы также хотел поместить временное сообщение в строку состояния и назначить цвет этому сообщению. Однако, поскольку на этот раз это не QLabel (я использую QStatusBar :: showMessage, который просто принимает QString), я больше не могу менять цвет. Приведенные выше теги не распознаются, и вся строка "<font color=\"green\">In progress</font>" отображается серым цветом.

У кого-нибудь есть идеи?

Ответы [ 5 ]

5 голосов
/ 29 ноября 2013

Чтобы установить цвет фона или текста для 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)

на init , подключите QStatusBar's 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

2 голосов
/ 23 июля 2012

Если ваш текст showMessages будет одного и того же цвета, вы можете определить его в палитре QStatusBar через QtDesigner (цвет текста окна) для временных сообщений, а затем использовать цвет QLabel для обычных и постоянных сообщений разных цветов.

2 голосов
/ 26 апреля 2011

К сожалению, QStatusBar::showMessage() не поддерживает форматирование расширенного текста .Это даже сообщалось как запрос функции давным-давно, но, похоже, на него не обратили достаточного внимания.

Я думаю, что ваш лучший выбор - либо придерживайтесь простых текстовых сообщений или для непосредственного управления существующими QLabel.Это потребует некоторой дополнительной работы для обработки временных изменений статуса, так что вы должны решить, стоит ли эта проблема.

0 голосов
/ 08 февраля 2017

Самое короткое решение, которое я мог найти для этой проблемы до сих пор:

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

Это не на 100% чисто, хотя, если другое сообщение такого рода будет запущено в течение 2 секунд времени работы таймера, то цвет, возможно, изменится слишком рано.

0 голосов
/ 25 января 2017

Также можно создать подкласс 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);
  }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...