void PaintedSlider::paintEvent(WPaintDevice *paintDevice) { int tickInterval = slider_->tickInterval(); int r = range(); if (r == 0) { // Empty range, don't paint anything return; } if (tickInterval == 0) tickInterval = r / 2; int numTicks = tickInterval == 0 ? 2 : r / tickInterval + 1; if (numTicks < 1) return; int w = 0, h = 0; switch (slider_->orientation()) { case Orientation::Horizontal: w = (int)paintDevice->width().toPixels(); h = (int)paintDevice->height().toPixels(); break; case Orientation::Vertical: w = (int)paintDevice->height().toPixels(); h = (int)paintDevice->width().toPixels(); } double tickStep = ((double)w + 10 - slider_->handleWidth()) / (numTicks - 1); WPainter painter(paintDevice); for (int i = 0; i < numTicks; ++i) { int v = slider_->minimum() + i * tickInterval; int x = -5 + slider_->handleWidth()/2 + (int) (i * tickStep); switch (slider_->orientation()) { case Orientation::Horizontal: slider_->paintTick(painter, v, x, h/2); break; case Orientation::Vertical: slider_->paintTick(painter, v, h/2, w - x); } } }