Qt禁用触摸屏检测

Qt disable touch screen detection

本文关键字:检测 触摸屏 Qt      更新时间:2023-10-16

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

这取决于。如果您的操作系统区分触摸事件和鼠标按下,您可以创建一个 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);

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