我有一个带自定义绘画的QStyledItemDelegate。每个项目包含一些文本和进度条。进度条是圆形(径向),因此也可以自定义绘制:
此外,我的应用程序使用QSS进行一些自定义样式
此项委托用于QListView
我希望能够使用QSS将不同的ProgressBar块颜色设置为100%和非100%
的问题
有没有办法知道当前QSS的进度条块的颜色?
调查和代码我尝试过:
QSS:
QProgressBar { border: 1px solid #909090; ; }
QProgressBar[value="100"]::chunk {
width: 10px;
margin: 0.5px;
background-color: rgb(50,145,212);
}
QProgressBar::chunk {
width: 10px;
margin: 0.5px;
background-color: rgb(81,211,49);
}
C ++:
QStyleOptionProgressBarV2 pbStyleOption;
{
boost::scoped_ptr<QProgressBar> pb(new QProgressBar());
pb->setStyle(QApplication::style());
pb->setStyleSheet(static_cast<QApplication*>(QApplication::instance())->styleSheet());
pb->setValue(progressPercentage);
pb->setMaximum(100);
pbStyleOption.initFrom(pb);
qDebug() << pbStyleOption.palette.brush(QPalette::Highlight);
}
我正在使用QPalette::Highlight
,因为我查看了Qt的样式来源,并将此ColorRole用于PE_IndicatorProgressChunk
。
P.S。
上面的QSS仅适用于略微修改的QProgressBar
。唯一的修改是重新实现的setValue()
。这是它的代码:
void StyledProgressBar::setValue(int val)
{
QProgressBar::setValue(val);
style()->unpolish(this);
style()->polish(this);
update();
}