简述
QSlider使用默认的样式并且设置显示刻度时刻度线是可以画出来的,但是当我应用QSS样式时刻度线就会消失,QSlider似乎是不支持QSS样式与刻度线并存的样子。而且QSlider也不支持显示刻度线所在的文本数值,无奈之下只好重写了系统的paintEvent事件来手动绘制刻度以及刻度线文本数值。
重写paintEvent
void MSlider::paintEvent(QPaintEvent *)
{
QStylePainter p(this);
QStyleOptionSlider opt;
initStyleOption(&opt);
// 获取滑块的大小
QRect handle = style()->subControlRect(QStyle::CC_Slider, &opt, QStyle::SC_SliderHandle, this);
// draw tick marks
// do this manually because they are very badly behaved with style sheets
int interval = tickInterval();
if (interval == 0)
{
interval = pageStep();
}
if (tickPosition() != NoTicks)
{
// 因为刻度间隔比较密集,所以设置文本大小要小上几号,否则会重叠
QFont f = font();
f.setPointSize(f.pointSize() - 2);
QFontMetrics metrics(f);
p.setFont(f);
if (isEnabled()) p.setPe