5

私は Python で Qt を使用しています。下部にステータス バーがあるメインウィンドウがあります。"<font color=\"green\">In progress</font>"QLabel を使用してバーにメッセージを表示し、QLabel テキストのようなものを使用してそのメッセージの色を設定できます。

ステータスバーにも一時的なメッセージを入れて、そのメッセージにも色を割り当てたいと思います。ただし、今回は QLabel ではないため (QString を受け取るだけの QStatusBar::showMessage を使用しています)、色を変更することはできません。上記のタグは認識されず、文字列全体"<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;}") 

T

于 2013-11-28T21:19:47.083 に答える
4

残念ながら、リッチテキスト形式はサポートされていませんこれはずっと前に機能リクエストとして報告されていましたが、十分な注目を集めていなかったようです。QStatusBar::showMessage()

あなたの最善の策は、プレーンテキストメッセージに固執する、既存の QLabelものを直接操作することだと思います。これには、一時的なステータスの変更を処理するための追加の作業が必要になるため、問題を解決する価値があるかどうかを判断するのはあなたの責任です。

于 2011-04-26T19:53:59.627 に答える
2

showMessages テキストがすべて同じ色になる場合は、QtDesigner (ウィンドウ テキストの色) を介して 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 に答える