当前位置: 首页>>代码示例>>C++>>正文


C++ QWaylandInputDevice::sendKeyReleaseEvent方法代码示例

本文整理汇总了C++中QWaylandInputDevice::sendKeyReleaseEvent方法的典型用法代码示例。如果您正苦于以下问题:C++ QWaylandInputDevice::sendKeyReleaseEvent方法的具体用法?C++ QWaylandInputDevice::sendKeyReleaseEvent怎么用?C++ QWaylandInputDevice::sendKeyReleaseEvent使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在QWaylandInputDevice的用法示例。


在下文中一共展示了QWaylandInputDevice::sendKeyReleaseEvent方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: eventFilter

bool QWindowCompositor::eventFilter(QObject *obj, QEvent *event)
{
    if (obj != m_window)
        return false;

    QWaylandInputDevice *input = defaultInputDevice();

    switch (event->type()) {
    case QEvent::Expose:
        m_renderScheduler.start(0);
        if (m_window->isExposed()) {
            // Alt-tabbing away normally results in the alt remaining in
            // pressed state in the clients xkb state. Prevent this by sending
            // a release. This is not an issue in a "real" compositor but
            // is very annoying when running in a regular window on xcb.
            Qt::KeyboardModifiers mods = QGuiApplication::queryKeyboardModifiers();
            if (m_modifiers != mods && input->keyboardFocus()) {
                Qt::KeyboardModifiers stuckMods = m_modifiers ^ mods;
                if (stuckMods & Qt::AltModifier)
                    input->sendKeyReleaseEvent(64); // native scancode for left alt
                m_modifiers = mods;
            }
        }
        break;
    case QEvent::MouseButtonPress: {
        QPointF local;
        QMouseEvent *me = static_cast<QMouseEvent *>(event);
        QWaylandSurface *targetSurface = surfaceAt(me->localPos(), &local);
        if (m_dragKeyIsPressed && targetSurface) {
            m_draggingWindow = targetSurface;
            m_drag_diff = local;
        } else {
            if (targetSurface && input->keyboardFocus() != targetSurface) {
                input->setKeyboardFocus(targetSurface);
                m_surfaces.removeOne(targetSurface);
                m_surfaces.append(targetSurface);
                m_renderScheduler.start(0);
            }
            input->sendMousePressEvent(me->button(), local, me->localPos());
        }
        return true;
    }
    case QEvent::MouseButtonRelease: {
        QWaylandSurface *targetSurface = input->mouseFocus();
        if (m_draggingWindow) {
            m_draggingWindow = 0;
            m_drag_diff = QPointF();
        } else {
            QMouseEvent *me = static_cast<QMouseEvent *>(event);
            QPointF localPos;
            if (targetSurface)
                localPos = toSurface(targetSurface, me->localPos());
            input->sendMouseReleaseEvent(me->button(), localPos, me->localPos());
        }
        return true;
    }
    case QEvent::MouseMove: {
        QMouseEvent *me = static_cast<QMouseEvent *>(event);
        if (m_draggingWindow) {
            m_draggingWindow->setPos(me->localPos() - m_drag_diff);
            m_renderScheduler.start(0);
        } else {
            QPointF local;
            QWaylandSurface *targetSurface = surfaceAt(me->localPos(), &local);
            input->sendMouseMoveEvent(targetSurface, local, me->localPos());
        }
        break;
    }
    case QEvent::Wheel: {
        QWheelEvent *we = static_cast<QWheelEvent *>(event);
        input->sendMouseWheelEvent(we->orientation(), we->delta());
        break;
    }
    case QEvent::KeyPress: {
        QKeyEvent *ke = static_cast<QKeyEvent *>(event);
        if (ke->key() == Qt::Key_Meta || ke->key() == Qt::Key_Super_L) {
            m_dragKeyIsPressed = true;
        }
        m_modifiers = ke->modifiers();
        QWaylandSurface *targetSurface = input->keyboardFocus();
        if (targetSurface)
            input->sendKeyPressEvent(ke->nativeScanCode());
        break;
    }
    case QEvent::KeyRelease: {
        QKeyEvent *ke = static_cast<QKeyEvent *>(event);
        if (ke->key() == Qt::Key_Meta || ke->key() == Qt::Key_Super_L) {
            m_dragKeyIsPressed = false;
        }
        m_modifiers = ke->modifiers();
        QWaylandSurface *targetSurface = input->keyboardFocus();
        if (targetSurface)
            input->sendKeyReleaseEvent(ke->nativeScanCode());
        break;
    }
    case QEvent::TouchBegin:
    case QEvent::TouchUpdate:
    case QEvent::TouchEnd:
    {
        QWaylandSurface *targetSurface = 0;
//.........这里部分代码省略.........
开发者ID:locusf,项目名称:qtwayland,代码行数:101,代码来源:qwindowcompositor.cpp

示例2: eventFilter

bool QtWaylandMotorcarCompositor::eventFilter(QObject *obj, QEvent *event)
{
    if (obj != m_glData->m_window)
        return false;

    QWaylandInputDevice *input = defaultInputDevice();

    switch (event->type()) {
    case QEvent::Expose:
        m_renderScheduler.start(0);
        if (m_glData->m_window->isExposed()) {
            // Alt-tabbing away normally results in the alt remaining in
            // pressed state in the clients xkb state. Prevent this by sending
            // a release. This is not an issue in a "real" compositor but
            // is very annoying when running in a regular window on xcb.
            Qt::KeyboardModifiers mods = QGuiApplication::queryKeyboardModifiers();
            if (m_modifiers != mods && input->keyboardFocus()) {
                Qt::KeyboardModifiers stuckMods = m_modifiers ^ mods;
                if (stuckMods & Qt::AltModifier)
                    input->sendKeyReleaseEvent(64); // native scancode for left alt
                m_modifiers = mods;
            }
        }
        break;
//    case QEvent::MouseButtonPress: {
//        QPointF local;
//        QMouseEvent *me = static_cast<QMouseEvent *>(event);
//        QWaylandSurface *targetSurface = surfaceAt(me->localPos(), &local);
//        if (m_dragKeyIsPressed && targetSurface) {
//            m_draggingWindow = targetSurface;
//            m_drag_diff = local;
//        } else {
//            if (targetSurface && input->keyboardFocus() != targetSurface) {
//                input->setKeyboardFocus(targetSurface);
//                //                m_surfaces.removeOne(targetSurface);
//                //                m_surfaces.append(targetSurface);
//                //m_renderScheduler.start(0);
//            }
//            input->sendMousePressEvent(me->button(), local, me->localPos());
//        }
//        return true;
//    }
//    case QEvent::MouseButtonRelease: {
//        QWaylandSurface *targetSurface = input->mouseFocus();
//        if (m_draggingWindow) {
//            m_draggingWindow = 0;
//            m_drag_diff = QPointF();
//        } else {
//            QMouseEvent *me = static_cast<QMouseEvent *>(event);
//            QPointF localPos;
//            if (targetSurface)
//                localPos = toSurface(targetSurface, me->localPos());
//            input->sendMouseReleaseEvent(me->button(), localPos, me->localPos());
//        }
//        return true;
//    }
//    case QEvent::MouseMove: {
//        QMouseEvent *me = static_cast<QMouseEvent *>(event);
//        if (m_draggingWindow) {
//            m_draggingWindow->setPos(me->localPos() - m_drag_diff);
//            //m_renderScheduler.start(0);
//        } else {
//            QPointF local;
//            QWaylandSurface *targetSurface = surfaceAt(me->localPos(), &local);
//            input->sendMouseMoveEvent(targetSurface, local, me->localPos());
//        }
//        break;
//    }
//    case QEvent::Wheel: {
//        QWheelEvent *we = static_cast<QWheelEvent *>(event);
//        input->sendMouseWheelEvent(we->orientation(), we->delta());
//        break;
//    }
    case QEvent::KeyPress: {
        QKeyEvent *ke = static_cast<QKeyEvent *>(event);
//        if (ke->key() == Qt::Key_Meta || ke->key() == Qt::Key_Super_L) {
//            m_dragKeyIsPressed = true;
//        }/*else if(ke->key() == Qt::Key_Up){
//            m_glData->m_cameraNode->setTransform(glm::translate(glm::mat4(1), glm::vec3(0,0,0.001f)) * m_glData->m_cameraNode->transform());
//        }else if(ke->key() == Qt::Key_Down){
//            m_glData->m_cameraNode->setTransform(glm::translate(glm::mat4(1), glm::vec3(0,0,-0.001f)) * m_glData->m_cameraNode->transform());
//        }*/
//        m_modifiers = ke->modifiers();
//        QWaylandSurface *targetSurface = input->keyboardFocus();
//        if (targetSurface)
        // input->sendKeyPressEvent(ke->nativeScanCode());
        this->scene()->windowManager()->sendEvent(motorcar::KeyboardEvent(motorcar::KeyboardEvent::Event::KEY_PRESS, ke->nativeScanCode(), defaultSeat()));
        break;
    }
    case QEvent::KeyRelease: {
        QKeyEvent *ke = static_cast<QKeyEvent *>(event);
//        if (ke->key() == Qt::Key_Meta || ke->key() == Qt::Key_Super_L) {
//            m_dragKeyIsPressed = false;
//        }
//        m_modifiers = ke->modifiers();
//        QWaylandSurface *targetSurface = input->keyboardFocus();
//        if (targetSurface)
        // input->sendKeyReleaseEvent(ke->nativeScanCode());
        this->scene()->windowManager()->sendEvent(motorcar::KeyboardEvent(motorcar::KeyboardEvent::Event::KEY_RELEASE, ke->nativeScanCode(), defaultSeat()));
        break;
//.........这里部分代码省略.........
开发者ID:rbarraud,项目名称:motorcar,代码行数:101,代码来源:qtwaylandmotorcarcompositor.cpp


注:本文中的QWaylandInputDevice::sendKeyReleaseEvent方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。