From c0701f3789acf3234e9f6431b4e8c7dc3ccefabb Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Thu, 27 Mar 2014 09:57:59 +0100 Subject: Polish the image gestures example. - Add a command line parser to properly evaluate help option and directory argument, add options to disable gestures. - Add logging category so that the user can actually see what is happening. - Scale large images. - Use qreal instead of float. - Minor polishing: set window title, position file dialog at pictures location. Task-number: QTBUG-37759 Task-number: QTBUG-37203 Change-Id: Ibaf54a13034b150386a8aee476f83a9eba298298 Reviewed-by: Indrajit Tapadar Reviewed-by: Shawn Rutledge --- .../widgets/gestures/imagegestures/imagewidget.cpp | 56 ++++++++++++++-------- 1 file changed, 37 insertions(+), 19 deletions(-) (limited to 'examples/widgets/gestures/imagegestures/imagewidget.cpp') diff --git a/examples/widgets/gestures/imagegestures/imagewidget.cpp b/examples/widgets/gestures/imagegestures/imagewidget.cpp index aad40afc26..57c2af4502 100644 --- a/examples/widgets/gestures/imagegestures/imagewidget.cpp +++ b/examples/widgets/gestures/imagegestures/imagewidget.cpp @@ -1,7 +1,7 @@ /**************************************************************************** ** -** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). +** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** ** This file is part of the examples of the Qt Toolkit. @@ -43,6 +43,8 @@ #include +Q_LOGGING_CATEGORY(lcExample, "qt.examples.imagegestures") + //! [constructor] ImageWidget::ImageWidget(QWidget *parent) : QWidget(parent), @@ -55,15 +57,17 @@ ImageWidget::ImageWidget(QWidget *parent) { setMinimumSize(QSize(100,100)); - -//! [enable gestures] - grabGesture(Qt::PanGesture); - grabGesture(Qt::PinchGesture); - grabGesture(Qt::SwipeGesture); -//! [enable gestures] } //! [constructor] +void ImageWidget::grabGestures(const QList &gestures) +{ + //! [enable gestures] + foreach (Qt::GestureType gesture, gestures) + grabGesture(gesture); + //! [enable gestures] +} + //! [event handler] bool ImageWidget::event(QEvent *event) { @@ -77,10 +81,10 @@ void ImageWidget::paintEvent(QPaintEvent*) { QPainter p(this); - float iw = currentImage.width(); - float ih = currentImage.height(); - float wh = height(); - float ww = width(); + const qreal iw = currentImage.width(); + const qreal ih = currentImage.height(); + const qreal wh = height(); + const qreal ww = width(); p.translate(ww/2, wh/2); p.translate(horizontalOffset, verticalOffset); @@ -98,11 +102,13 @@ void ImageWidget::mouseDoubleClickEvent(QMouseEvent *) verticalOffset = 0; horizontalOffset = 0; update(); + qCDebug(lcExample) << "reset on mouse double click"; } //! [gesture event handler] bool ImageWidget::gestureEvent(QGestureEvent *event) { + qCDebug(lcExample) << "gestureEvent():" << event->gestures().size(); if (QGesture *swipe = event->gesture(Qt::SwipeGesture)) swipeTriggered(static_cast(swipe)); else if (QGesture *pan = event->gesture(Qt::PanGesture)) @@ -126,6 +132,7 @@ void ImageWidget::panTriggered(QPanGesture *gesture) } #endif QPointF delta = gesture->delta(); + qCDebug(lcExample) << "panTriggered():" << delta; horizontalOffset += delta.x(); verticalOffset += delta.y(); update(); @@ -135,13 +142,16 @@ void ImageWidget::pinchTriggered(QPinchGesture *gesture) { QPinchGesture::ChangeFlags changeFlags = gesture->changeFlags(); if (changeFlags & QPinchGesture::RotationAngleChanged) { - qreal value = gesture->property("rotationAngle").toReal(); - qreal lastValue = gesture->property("lastRotationAngle").toReal(); - rotationAngle += value - lastValue; + const qreal value = gesture->property("rotationAngle").toReal(); + const qreal lastValue = gesture->property("lastRotationAngle").toReal(); + const qreal rotationAngleDelta = value - lastValue; + rotationAngle += rotationAngleDelta; + qCDebug(lcExample) << "pinchTriggered(): rotation by" << rotationAngleDelta << rotationAngle; } if (changeFlags & QPinchGesture::ScaleFactorChanged) { qreal value = gesture->property("scaleFactor").toReal(); currentStepScaleFactor = value; + qCDebug(lcExample) << "pinchTriggered(): " << currentStepScaleFactor; } if (gesture->state() == Qt::GestureFinished) { scaleFactor *= currentStepScaleFactor; @@ -155,10 +165,13 @@ void ImageWidget::swipeTriggered(QSwipeGesture *gesture) { if (gesture->state() == Qt::GestureFinished) { if (gesture->horizontalDirection() == QSwipeGesture::Left - || gesture->verticalDirection() == QSwipeGesture::Up) + || gesture->verticalDirection() == QSwipeGesture::Up) { + qCDebug(lcExample) << "swipeTriggered(): swipe to previous"; goPrevImage(); - else + } else { + qCDebug(lcExample) << "swipeTriggered(): swipe to next"; goNextImage(); + } update(); } } @@ -184,17 +197,22 @@ void ImageWidget::openDirectory(const QString &path) QImage ImageWidget::loadImage(const QString &fileName) { + qDebug() << position << files << fileName; QImageReader reader(fileName); + qCDebug(lcExample) << "loading" << QDir::toNativeSeparators(fileName) << position << '/' << files.size(); if (!reader.canRead()) { - qDebug() << fileName << ": can't load image"; + qCWarning(lcExample) << QDir::toNativeSeparators(fileName) << ": can't load image"; return QImage(); } QImage image; if (!reader.read(&image)) { - qDebug() << fileName << ": corrupted image"; + qCWarning(lcExample) << QDir::toNativeSeparators(fileName) << ": corrupted image: " << reader.errorString(); return QImage(); } + const QSize maximumSize(2000, 2000); // Reduce in case someone has large photo images. + if (image.size().width() > maximumSize.width() || image.height() > maximumSize.height()) + image = image.scaled(maximumSize, Qt::KeepAspectRatio, Qt::SmoothTransformation); return image; } @@ -238,7 +256,7 @@ void ImageWidget::goToImage(int index) return; if (index < 0 || index >= files.size()) { - qDebug() << "goToImage: invalid index: " << index; + qCWarning(lcExample) << "goToImage: invalid index: " << index; return; } -- cgit v1.2.3