【问题标题】:Qt disable touch screen detectionQt禁用触摸屏检测
【发布时间】:2014-12-18 15:27:14
【问题描述】:

有没有办法将 Qt 应用程序配置为不检测触摸屏以保持正常屏幕的行为?

【问题讨论】:

  • 您能解释一下有什么区别,或者您想要更改/禁用的实际行为吗?以及什么硬件(设备类型、显示器和操作系统)?因为通常应用程序不会检测到触摸屏......它只是获取操作系统提供的内容。
  • 你为什么要这么做?你的用例是什么?

标签: c++ qt touchscreen


【解决方案1】:

这取决于。如果您的操作系统区分触摸事件和鼠标按下,您可以创建一个 touchEvent 过滤器来忽略这些事件,如下所示:

#include <QObject>
#include <QTouchEvent> // to get rid of "error: invalid use of incomplete type 'class QEvent'"

class QTouchEventFilter: public QObject
{
    Q_OBJECT
public:

    QTouchEventFilter(QObject *parent = 0) : QObject(parent)
    {
    }

protected:

    bool eventFilter(QObject * p_obj, QEvent * p_event)
    {
        if (p_event->type() == QEvent::TouchBegin ||
             p_event->type() == QEvent::TouchUpdate ||
             p_event->type() == QEvent::TouchEnd ||
             p_event->type() == QEvent::TouchCancel)
        {
            p_event->ignore();
            return true;
        }
        return false;
    }
};

然后将其安装在您要忽略触摸事件的小部件上:

myWidget->installEventFilter(new QTouchEventFilter);

但是,我的直觉是,在大多数操作系统上,您所说的“触摸”将作为鼠标按下事件出现,除非您愿意放弃所有操作,否则您将无法过滤掉它们该小部件的鼠标输入。如果您愿意,可以使用相同的概念,但将 Q​​Event 替换为曾经与鼠标关联的事件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-27
    • 1970-01-01
    • 2015-08-03
    • 1970-01-01
    相关资源
    最近更新 更多