我正在使用 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 资源以获取指导,但它不涵盖这种情况。
这是我自己的结论,也许有更好的答案。
根据进度条的定制文档,似乎只有 border、chunk 和 text-align 可以使用样式表进行定制。即使添加也selection-color不起作用,因为文本实际上并未被选择。
在尝试了这个问题的解决方案后,我得出的结论是
不过,如果你愿意妥协的话,有一个解决方案,使用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,但您将放弃更改边距、边框大小、边框颜色、边框半径和其他属性。