QTouchEvent而不是Linux上的QMouseEvent

时间:2017-10-02 14:10:59

标签: c++ linux qt touchscreen multiplatform

我试图在Qt 5.9中从M3触摸屏处理QTouchEvent。我使用Qt Finger Print example并且它在Windows 7上工作正常但在Ubuntu 16.04上我收到鼠标事件而不是触摸事件。这是Qt的错误或错误的操作系统配置吗?

更多QTouchDevice::devices().size()总是等于0。

1 个答案:

答案 0 :(得分:1)

我建议您使用EventFilters来捕获多个平台上的触摸和鼠标事件。为此,您必须在小部件的构造函数中调用installEventFilter并实现eventFilter来过滤要查找的QEvent。例如,使用以下内容:

bool ECGPlot::eventFilter(QObject *o, QEvent *ev) {
    bool ret = false;

    switch (ev->type ()) {
        case QEvent::TouchBegin:
            ret = true;
            break;

        case QEvent::TouchUpdate:
            ret = true;
            break;

        case QEvent::TouchEnd:
            ret = true;
            break;

        case QEvent::Wheel:
            ret = true;
            break;

        case QEvent::MouseButtonPress:
            ret = true;
            break;

        case QEvent::MouseButtonRelease:
            ret = true;
            break;

        case QEvent::MouseMove:
            ret = true;
            break;

    }

    return ret;
}