aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@qt.io>2016-11-29 12:29:13 +0100
committerJ-P Nurmi <jpnurmi@qt.io>2016-11-29 15:19:39 +0000
commit948932c9c6ae535647e69962aad2add516802b9c (patch)
tree4e33edad68ee62a41943c58dcea61969cedb0dda /src
parent3f2cb85ac10b000a33781e5fa61b607f7effde07 (diff)
Add Dial::moved() signal
[ChangeLog][Controls][Dial] Added a moved() signal that is emitted whenever the dial is interactively moved by the user by using either touch, mouse, or keys. Task-number: QTBUG-57203 Change-Id: I4b4224309f11bdcafd5c7b88414d80ebe2616238 Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/quicktemplates2/qquickdial.cpp17
-rw-r--r--src/quicktemplates2/qquickdial_p.h1
2 files changed, 18 insertions, 0 deletions
diff --git a/src/quicktemplates2/qquickdial.cpp b/src/quicktemplates2/qquickdial.cpp
index 9475cff7..2932f4ce 100644
--- a/src/quicktemplates2/qquickdial.cpp
+++ b/src/quicktemplates2/qquickdial.cpp
@@ -77,6 +77,14 @@ QT_BEGIN_NAMESPACE
\sa {Customizing Dial}, {Input Controls}
*/
+/*!
+ \since QtQuick.Controls 2.2
+ \qmlsignal QtQuick.Controls::Dial::moved()
+
+ This signal is emitted when the dial has been interactively moved
+ by the user by using either touch, mouse, or keys.
+*/
+
static const qreal startAngleRadians = (M_PI * 2.0) * (4.0 / 6.0);
static const qreal startAngle = -140;
static const qreal endAngleRadians = (M_PI * 2.0) * (5.0 / 6.0);
@@ -535,6 +543,7 @@ void QQuickDial::setHandle(QQuickItem *handle)
void QQuickDial::keyPressEvent(QKeyEvent *event)
{
Q_D(QQuickDial);
+ const qreal oldValue = d->value;
switch (event->key()) {
case Qt::Key_Left:
case Qt::Key_Down:
@@ -569,6 +578,8 @@ void QQuickDial::keyPressEvent(QKeyEvent *event)
QQuickControl::keyPressEvent(event);
break;
}
+ if (!qFuzzyCompare(d->value, oldValue))
+ emit moved();
}
void QQuickDial::keyReleaseEvent(QKeyEvent *event)
@@ -599,6 +610,7 @@ void QQuickDial::mouseMoveEvent(QMouseEvent *event)
}
}
if (keepMouseGrab()) {
+ const qreal oldPos = d->position;
qreal pos = d->positionAt(event->pos());
if (d->snapMode == SnapAlways)
pos = d->snapPosition(pos);
@@ -608,6 +620,8 @@ void QQuickDial::mouseMoveEvent(QMouseEvent *event)
setValue(d->valueAt(pos));
else
d->setPosition(pos);
+ if (!qFuzzyCompare(pos, oldPos))
+ emit moved();
}
}
}
@@ -618,12 +632,15 @@ void QQuickDial::mouseReleaseEvent(QMouseEvent *event)
QQuickControl::mouseReleaseEvent(event);
if (keepMouseGrab()) {
+ const qreal oldPos = d->position;
qreal pos = d->positionAt(event->pos());
if (d->snapMode != NoSnap)
pos = d->snapPosition(pos);
if (d->wrap || (!d->wrap && !d->isLargeChange(event->pos(), pos)))
setValue(d->valueAt(pos));
+ if (!qFuzzyCompare(pos, oldPos))
+ emit moved();
setKeepMouseGrab(false);
}
diff --git a/src/quicktemplates2/qquickdial_p.h b/src/quicktemplates2/qquickdial_p.h
index 17a44b7a..cd45ad0e 100644
--- a/src/quicktemplates2/qquickdial_p.h
+++ b/src/quicktemplates2/qquickdial_p.h
@@ -129,6 +129,7 @@ Q_SIGNALS:
void pressedChanged();
Q_REVISION(2) void liveChanged();
void handleChanged();
+ Q_REVISION(2) void moved();
protected:
void keyPressEvent(QKeyEvent *event) override;