Qt 样式表:控制进度条文本突出显示颜色?

Mic*_*ied 4 qt qtstylesheets

语境

我正在使用 Qt 样式表来自定义QProgressBarUI 中的 a。我有一个对比鲜明的主题,如下所示:

在此输入图像描述

我通过样式表控制它:

QProgressBar {
    color: #FFFFFF;               /* Text color (not highlighted)
    border: 2px solid white;      /* Border color */
    border-radius: 5px;           /* Rounded border edges */
    margin-left: 24px;
    margin-right: 24px;           
    text-align: center            /* Center the X% indicator */
}

QProgressBar::chunk {
    color: #204a87;               /* Highlighted text color!? Not working */
    background-color: #FFFFFF;    /* Color of the 'completed' bar */
}
Run Code Online (Sandbox Code Playgroud)

问题

不幸的是,我发现一旦突出显示的进度文本颜色被进度条本身遮盖或遮盖,我就无法更改它。

在此输入图像描述

这可以从上面看到。

解决方案

我试图看看是否可以为文本设置突出显示属性。我知道,我可以从调色板中设置对比突出显示颜色,一旦进度条覆盖它,进度文本标签就会切换颜色。但是,我在这里找不到如何访问该属性

QProgressBar::text::highlighted {
    color: #204a87; /* Doesn't do anything */ 
}
Run Code Online (Sandbox Code Playgroud)

我还尝试添加颜色属性,QProgressBar::chunk如上所示。这也没有起到任何作用。

如何在样式表中设置进度条标签的对比突出显示颜色?我主要查看此 Qt 资源以获取指导,但它不涵盖这种情况。

Min*_*inh 5

这是我自己的结论,也许有更好的答案。

根据进度条的定制文档,似乎只有 border、chunk 和 text-align 可以使用样式表进行定制。即使添加也selection-color不起作用,因为文本实际上并未被选择。

在尝试了这个问题的解决方案后,我得出的结论是

  1. Qt 使用画家突出显示进度栏中的文本,而不是在样式表中
  2. 对样式表的任何更改都将覆盖画家

不过,如果你愿意妥协的话,有一个解决方案,使用QPalette如下融合风格

#include "mainwindow.h"

#include <QStyleFactory>
#include <QProgressBar>
#include <QSlider>
#include <QVBoxLayout>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    QWidget *central_widget = new QWidget{this};
    this->setCentralWidget(central_widget);

    QProgressBar *progress_bar = new QProgressBar{central_widget};
    progress_bar->setRange(0, 100);
    progress_bar->setValue(0);
    progress_bar->setStyle(QStyleFactory::create("fusion"));
    QSlider *slider = new QSlider{central_widget};
    slider->setRange(0, 100);
    slider->setValue(0);
    slider->setOrientation(Qt::Orientation::Horizontal);
    connect(slider, &QSlider::valueChanged, progress_bar, &QProgressBar::setValue);

    QVBoxLayout *layout = new QVBoxLayout{central_widget};
    layout->addWidget(progress_bar);
    layout->addWidget(slider);

    QPalette palette = progress_bar->palette();
    palette.setColor(QPalette::Text, QColor::fromRgb(QRgb{0xFFFFFF})); // text, not highlight
    palette.setColor(QPalette::HighlightedText, QColor::fromRgb(QRgb{0x204a87})); // text, highlight
    palette.setColor(QPalette::Base, QColor::fromRgb(QRgb{0x0000FF})); // background, not highlight
    palette.setColor(QPalette::Highlight, QColor::fromRgb(QRgb{0xFFFFFF})); // background, highlight
    progress_bar->setPalette(palette);
}

MainWindow::~MainWindow()
{

}
Run Code Online (Sandbox Code Playgroud)

融合样式的文本位于进度条中央。可以使用 更改文本和背景颜色QPalette,但您将放弃更改边距、边框大小、边框颜色、边框半径和其他属性。