bool ReticleHandler::eventFilter(QObject *, QEvent *event) { static bool show = true; switch (event->type()) { case QEvent::TouchBegin: show = true; break; case QEvent::TouchUpdate: show = false; break; case QEvent::TouchCancel: show = false; break; case QEvent::TouchEnd: { if (show) { QTouchEvent *touchEvent = static_cast<QTouchEvent *>(event); const QTouchEvent::TouchPoint &touchPoint = touchEvent->touchPoints().first(); QPointF fpoint = touchPoint.pos(); int x = static_cast<int>(fpoint.x()); int y = static_cast<int>(fpoint.y()); QScreen *primaryScreen = QGuiApplication::primaryScreen(); QTransform lOrientationTranform = primaryScreen->transformBetween(primaryScreen->orientation(), primaryScreen->primaryOrientation(), primaryScreen->geometry()).inverted(); emit reticleEvent(lOrientationTranform.map(QPoint(x,y))); }; show = false; } break; } return false; }
void tst_QScreen::orientationChange() { qRegisterMetaType<Qt::ScreenOrientation>("Qt::ScreenOrientation"); QScreen *screen = QGuiApplication::primaryScreen(); screen->setOrientationUpdateMask(Qt::LandscapeOrientation | Qt::PortraitOrientation); QWindowSystemInterface::handleScreenOrientationChange(screen, Qt::LandscapeOrientation); QWindowSystemInterface::flushWindowSystemEvents(); QTRY_COMPARE(screen->orientation(), Qt::LandscapeOrientation); QWindowSystemInterface::handleScreenOrientationChange(screen, Qt::PortraitOrientation); QWindowSystemInterface::flushWindowSystemEvents(); QTRY_COMPARE(screen->orientation(), Qt::PortraitOrientation); QSignalSpy spy(screen, SIGNAL(orientationChanged(Qt::ScreenOrientation))); QWindowSystemInterface::handleScreenOrientationChange(screen, Qt::InvertedLandscapeOrientation); QWindowSystemInterface::flushWindowSystemEvents(); QWindowSystemInterface::handleScreenOrientationChange(screen, Qt::InvertedPortraitOrientation); QWindowSystemInterface::flushWindowSystemEvents(); QWindowSystemInterface::handleScreenOrientationChange(screen, Qt::LandscapeOrientation); QWindowSystemInterface::flushWindowSystemEvents(); QTRY_COMPARE(screen->orientation(), Qt::LandscapeOrientation); QCOMPARE(spy.count(), 1); spy.clear(); QWindowSystemInterface::handleScreenOrientationChange(screen, Qt::InvertedLandscapeOrientation); QWindowSystemInterface::flushWindowSystemEvents(); QTRY_COMPARE(screen->orientation(), Qt::LandscapeOrientation); QCOMPARE(spy.count(), 0); screen->setOrientationUpdateMask(screen->orientationUpdateMask() | Qt::InvertedLandscapeOrientation); QTRY_COMPARE(screen->orientation(), Qt::InvertedLandscapeOrientation); QCOMPARE(spy.count(), 1); }
QT_BEGIN_NAMESPACE QVideoOutputOrientationHandler::QVideoOutputOrientationHandler(QObject *parent) : QObject(parent) , m_currentOrientation(0) { QScreen *screen = QGuiApplication::primaryScreen(); // we want to be informed about all orientation changes screen->setOrientationUpdateMask(Qt::PortraitOrientation|Qt::LandscapeOrientation |Qt::InvertedPortraitOrientation|Qt::InvertedLandscapeOrientation); connect(screen, SIGNAL(orientationChanged(Qt::ScreenOrientation)), this, SLOT(screenOrientationChanged(Qt::ScreenOrientation))); screenOrientationChanged(screen->orientation()); }