/**************************************************************************** ** ** Copyright (C) 2016 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the test suite of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:GPL-EXCEPT$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 3 as published by the Free Software ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT ** included in the packaging of this file. Please review the following ** information to ensure the GNU General Public License requirements will ** be met: https://www.gnu.org/licenses/gpl-3.0.html. ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #include #include #include #include #include #include #include #include #include #include #include "imageitem.h" #include "gestures.h" #include "mousepangesturerecognizer.h" class GraphicsView : public QGraphicsView { public: GraphicsView(QGraphicsScene *scene, QWidget *parent = nullptr) : QGraphicsView(scene, parent) { } protected: bool viewportEvent(QEvent *event) { if (event->type() == QEvent::Gesture) { QGestureEvent *ge = static_cast(event); if (QPanGesture *pan = static_cast(ge->gesture(Qt::PanGesture))) { switch (pan->state()) { case Qt::GestureStarted: qDebug("view: Pan: started"); break; case Qt::GestureFinished: qDebug("view: Pan: finished"); break; case Qt::GestureCanceled: qDebug("view: Pan: canceled"); break; case Qt::GestureUpdated: break; default: qDebug("view: Pan: "); break; } const QPointF delta = pan->delta(); QScrollBar *vbar = verticalScrollBar(); QScrollBar *hbar = horizontalScrollBar(); vbar->setValue(vbar->value() - delta.y()); hbar->setValue(hbar->value() - delta.x()); ge->accept(pan); return true; } } return QGraphicsView::viewportEvent(event); } }; class StandardGestures : public QWidget { public: StandardGestures(QWidget *parent = nullptr) : QWidget(parent) { scene = new QGraphicsScene(this); scene->setSceneRect(-2000, -2000, 4000, 4000); view = new QGraphicsView(scene, 0); QVBoxLayout *l = new QVBoxLayout(this); l->addWidget(view); } QGraphicsScene *scene; QGraphicsView *view; }; class GlobalViewGestures : public QWidget { Q_OBJECT public: GlobalViewGestures(QWidget *parent = nullptr) : QWidget(parent) { scene = new QGraphicsScene(this); scene->setSceneRect(-2000, -2000, 4000, 4000); view = new GraphicsView(scene, 0); view->viewport()->grabGesture(Qt::PanGesture); view->viewport()->grabGesture(ThreeFingerSlideGesture::Type); QVBoxLayout *l = new QVBoxLayout(this); l->addWidget(view); } QGraphicsScene *scene; QGraphicsView *view; }; class GraphicsItemGestures : public QWidget { Q_OBJECT public: GraphicsItemGestures(QWidget *parent = nullptr) : QWidget(parent) { scene = new QGraphicsScene(this); scene->setSceneRect(-2000, -2000, 4000, 4000); view = new QGraphicsView(scene, 0); view->viewport()->grabGesture(Qt::PanGesture); view->viewport()->grabGesture(ThreeFingerSlideGesture::Type); QVBoxLayout *l = new QVBoxLayout(this); l->addWidget(view); } QGraphicsScene *scene; QGraphicsView *view; }; class MainWindow : public QMainWindow { public: MainWindow(); void setDirectory(const QString &path); private: QTabWidget *tabWidget; StandardGestures *standardGestures; GlobalViewGestures *globalViewGestures; GraphicsItemGestures *graphicsItemGestures; }; MainWindow::MainWindow() { (void)QGestureRecognizer::registerRecognizer(new MousePanGestureRecognizer); ThreeFingerSlideGesture::Type = QGestureRecognizer::registerRecognizer(new ThreeFingerSlideGestureRecognizer); tabWidget = new QTabWidget; standardGestures = new StandardGestures; tabWidget->addTab(standardGestures, "Standard gestures"); globalViewGestures = new GlobalViewGestures; tabWidget->addTab(globalViewGestures , "Global gestures"); graphicsItemGestures = new GraphicsItemGestures; tabWidget->addTab(graphicsItemGestures, "Graphics item gestures"); setCentralWidget(tabWidget); } void MainWindow::setDirectory(const QString &path) { QDir dir(path); QStringList files = dir.entryList(QDir::Files | QDir::Readable | QDir::NoDotAndDotDot); foreach(const QString &file, files) { QImageReader img(path + QLatin1Char('/') +file); QImage image = img.read(); if (!image.isNull()) { { ImageItem *item = new ImageItem(image); item->setPos(0, 0); item->setFlags(QGraphicsItem::ItemIsMovable); standardGestures->scene->addItem(item); } { ImageItem *item = new ImageItem(image); item->setPos(0, 0); item->setFlags(QGraphicsItem::ItemIsMovable); globalViewGestures->scene->addItem(item); } { GestureImageItem *item = new GestureImageItem(image); item->setPos(0, 0); item->setFlags(QGraphicsItem::ItemIsMovable); graphicsItemGestures->scene->addItem(item); } } } { QList items = standardGestures->scene->items(); if (!items.isEmpty()) standardGestures->view->ensureVisible(items.at(0)); } { QList items = globalViewGestures->scene->items(); if (!items.isEmpty()) globalViewGestures->view->ensureVisible(items.at(0)); } { QList items = graphicsItemGestures->scene->items(); if (!items.isEmpty()) graphicsItemGestures->view->ensureVisible(items.at(0)); } } int main(int argc, char **argv) { QApplication app(argc, argv); MainWindow window; if (QApplication::arguments().size() > 1) window.setDirectory(QApplication::arguments().at(1)); else window.setDirectory(QFileDialog::getExistingDirectory(0, "Select image folder")); window.show(); return app.exec(); } #include "main.moc"