79void QDial::initStyleOption(QStyleOptionSlider *option)
const
85 option->initFrom(
this);
86 option->minimum = d->minimum;
87 option->maximum = d->maximum;
88 option->sliderPosition = d->position;
89 option->sliderValue = d->value;
90 option->singleStep = d->singleStep;
91 option->pageStep = d->pageStep;
92 option->upsideDown = !d->invertedAppearance;
93 option->notchTarget = d->target;
94 option->dialWrapping = d->wrapping;
95 option->subControls = QStyle::SC_All;
96 option->activeSubControls = QStyle::SC_None;
97 if (!d->showNotches) {
98 option->subControls &= ~QStyle::SC_DialTickmarks;
99 option->tickPosition = QSlider::TicksAbove;
101 option->tickPosition = QSlider::NoTicks;
103 option->tickInterval = notchSize();
109 double yy = q->height()/2.0 - p.y();
110 double xx = p.x() - q->width()/2.0;
111 double a = (xx || yy) ?
std::atan2(yy, xx) : 0;
117 int minv = minimum, maxv = maximum;
122 maxv = maximum + dist;
128 v = (
int)(0.5 + minv + r * (Q_PI * 3 / 2 - a) / (2 * Q_PI));
130 v = (
int)(0.5 + minv + r* (Q_PI * 4 / 3 - a) / (Q_PI * 10 / 6));
135 return !invertedAppearance ? bound(v) : maximum - bound(v);
239void QDial::mousePressEvent(QMouseEvent *e)
242 if (d->maximum == d->minimum ||
243 (e->button() != Qt::LeftButton) ||
244 (e->buttons() ^ e->button())) {
249 setSliderPosition(d->valueFromPoint(e->position().toPoint()));
346int QDial::notchSize()
const
350 qreal r = qMin(width(), height())/2.0;
352 int l = qRound(r * (d->wrapping ? 6.0 : 5.0) * Q_PI / 6.0);
354 if (d->maximum > d->minimum + d->pageStep)
355 l = qRound(l * d->pageStep /
double(d->maximum - d->minimum));
357 l = qMax(l * d->singleStep / (d->pageStep ? d->pageStep : 1), 1);
359 l = qMax(qRound(d->target / l), 1);
361 return d->singleStep * l;