【问题标题】:QTouchEvent instead QMouseEvent on LinuxQTouchEvent 而不是 Linux 上的 QMouseEvent
【发布时间】:2018-03-13 15:00:30
【问题描述】:

我正在尝试在 Qt 5.9 中处理来自 M3 触摸屏的 QTouchEvent。我使用Qt Finger Print example,它在 Windows 7 上运行良好,但在 Ubuntu 16.04 上我收到鼠标事件而不是触摸事件。是Qt的错还是操作系统配置错误?

更重要的是QTouchDevice::devices().size()总是等于0。

【问题讨论】:

  • 你使用的是 Wayland 还是 X?
  • @Akiva 我使用 X 服务器
  • 也许QCoreApplication::setAttribute(Qt::AA_SynthesizeMouseForUnhandledTouchEvents, false); ?
  • @dtech 它不会改变任何东西。
  • 我假设您已经详细阅读了QTouchEvent docs 并检查了您的小部件是否设置了Qt::WA_AcceptTouchEvents 以及@dtech 提到的内容?

标签: c++ linux qt touchscreen multiplatform


【解决方案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;
}

【讨论】:

    猜你喜欢
    • 2016-10-05
    • 1970-01-01
    • 1970-01-01
    • 2014-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多