80void QDial::initStyleOption(QStyleOptionSlider *option)
const
86 option->initFrom(
this);
87 option->minimum = d->minimum;
88 option->maximum = d->maximum;
89 option->sliderPosition = d->position;
90 option->sliderValue = d->value;
91 option->singleStep = d->singleStep;
92 option->pageStep = d->pageStep;
93 option->upsideDown = !d->invertedAppearance;
94 option->notchTarget = d->target;
95 option->dialWrapping = d->wrapping;
96 option->subControls = QStyle::SC_All;
97 option->activeSubControls = QStyle::SC_None;
98 if (!d->showNotches) {
99 option->subControls &= ~QStyle::SC_DialTickmarks;
100 option->tickPosition = QSlider::TicksAbove;
102 option->tickPosition = QSlider::NoTicks;
104 option->tickInterval = notchSize();
110 double yy = q->height()/2.0 - p.y();
111 double xx = p.x() - q->width()/2.0;
112 double a = (xx || yy) ?
std::atan2(yy, xx) : 0;
118 int minv = minimum, maxv = maximum;
123 maxv = maximum + dist;
129 v = (
int)(0.5 + minv + r * (Q_PI * 3 / 2 - a) / (2 * Q_PI));
131 v = (
int)(0.5 + minv + r* (Q_PI * 4 / 3 - a) / (Q_PI * 10 / 6));
136 return !invertedAppearance ? bound(v) : maximum - bound(v);
240void QDial::mousePressEvent(QMouseEvent *e)
243 if (d->maximum == d->minimum ||
244 (e->button() != Qt::LeftButton) ||
245 (e->buttons() ^ e->button())) {
250 setSliderPosition(d->valueFromPoint(e->position().toPoint()));
347int QDial::notchSize()
const
351 qreal r = qMin(width(), height())/2.0;
353 int l = qRound(r * (d->wrapping ? 6.0 : 5.0) * Q_PI / 6.0);
355 if (d->maximum > d->minimum + d->pageStep)
356 l = qRound(l * d->pageStep /
double(d->maximum - d->minimum));
358 l = qMax(l * d->singleStep / (d->pageStep ? d->pageStep : 1), 1);
360 l = qMax(qRound(d->target / l), 1);
362 return d->singleStep * l;