Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何动态设置QProgressBar样式表?_C++_Qt_Qtstylesheets_Qprogressbar - Fatal编程技术网

C++ 如何动态设置QProgressBar样式表?

C++ 如何动态设置QProgressBar样式表?,c++,qt,qtstylesheets,qprogressbar,C++,Qt,Qtstylesheets,Qprogressbar,我正在尝试制作一个进度条,它可以根据滑块的值动态改变部分颜色。我现在最接近的方法是使用: bar->setStyleSheet(QString("QProgressBar::chunk:vertical {background: qlineargradient(x1:0, y1:0, x2: 0, y2: 1, stop:0 red, stop:0.5 green); border-radius: 9px;}") +QString(

我正在尝试制作一个进度条,它可以根据滑块的值动态改变部分颜色。我现在最接近的方法是使用:

bar->setStyleSheet(QString("QProgressBar::chunk:vertical {background: qlineargradient(x1:0, y1:0, x2: 0, y2: 1, stop:0 red, stop:0.5 green); border-radius: 9px;}")
                   +QString("QProgressBar::vertical {border: 1px solid #b4adad; border-radius: 9px; background: #2f2828; padding: 0px; text-align: left; margin-right: 4ex;}"));
我已经尝试将第二个停止点设置为slider->value(),这会带走整个样式表,留下一个空白的进度条。 我尝试过只使用CSS代码,这也带走了样式表:

{background: linear-gradient(to bottom, white 0%, blue 25%, blue 100%); border-radius: 9px;}"
我很困惑,因为我可以使用CSS设置背景,但除非我使用QlineArgradent,否则我无法让它工作,这是为什么?为了在Qt样式表中不受限制地实现CSS,需要做什么

是否可以将停止点的值设置为滑块的变化值

我还尝试在if语句中使用setStyleSheet函数,以便样式表本身将根据进度条的值而改变:

if (bar->value()<slider->value()) {
if(条->值()值()){
但是,这不会动态更改样式表。它似乎在打开应用程序之前运行了一次if语句。QT是否在应用程序打开时连续运行while循环,或者我弄错了?

从,有一个信号
void QProgressBar::valueChanged(int-value)
您可以连接到插槽并对
QProgressBar
sylesheet进行所需的更改,例如:

void MainWindow::on_progressBar_valueChanged(int value)
{
    if (value >= 0 && value < 50)
        ui->progressBar->setStyleSheet("border: 2px solid grey; border-radius: 5px; text-align: center;");
    else if (value >= 50 && value < 75)
        ui->progressBar->setStyleSheet("background-color: #05B8CC; width: 20px;");
    // and so on ...
}
void主窗口::on\u progressBar\u值已更改(int值)
{
如果(值>=0&&value<50)
ui->progressBar->setStyleSheet(“边框:2倍纯灰;边框半径:5倍;文本对齐:中心;”;
否则如果(值>=50&&value<75)
ui->progressBar->setStyleSheet(“背景色:#05B8CC;宽度:20px;”);
//等等。。。
}