Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Qt中接收触摸事件?_Qt - Fatal编程技术网

如何在Qt中接收触摸事件?

如何在Qt中接收触摸事件?,qt,Qt,在Qt中触摸屏幕时是否有接收方式。每当触摸屏时,我需要将计数器重置为0 我正在使用函数systemIdleControl将计数器重置为零。因此,当我触摸触摸屏时,它应该调用systemIdleControl如果您的环境和平台设置正确,那么您应该在QWidget中以mousePressEvent的形式接收触摸事件。 您应该从那里调用您的函数。如果您的环境和平台设置正确,那么您应该在QWidget中以mousePressEvent的形式接收触摸事件。 从那里你应该调用你的函数。如果你想截获所有触摸事

在Qt中触摸屏幕时是否有接收方式。每当触摸屏时,我需要将计数器重置为0


我正在使用函数
systemIdleControl
将计数器重置为零。因此,当我触摸触摸屏时,它应该调用
systemIdleControl

如果您的环境和平台设置正确,那么您应该在QWidget中以mousePressEvent的形式接收触摸事件。
您应该从那里调用您的函数。

如果您的环境和平台设置正确,那么您应该在QWidget中以mousePressEvent的形式接收触摸事件。
从那里你应该调用你的函数。

如果你想截获所有触摸事件,不管触摸了哪个小部件,一种方法是将
QApplication
(或者
QGuiApplication
子类化,如果你选择的话)并覆盖它的
notify
方法。差不多

class TouchResetApplication : public QApplication
{
    Q_OBJECT
    Q_DISABLE_COPY(TouchResetApplication)
public:
    TouchResetApplication(int&, char**);
protected:
    bool notify(QObject*, QEvent*) Q_DECL_OVERRIDE;
};


TouchResetApplication::TouchResetApplication(int& argc, char **argv)
    : QApplication(argc, argv)
{
}

bool TouchResetApplication::notify(QObject *receiver, QEvent *event)
{
    switch (event->type()) {
    case QEvent::TouchBegin:
    case QEvent::TouchUpdate:
    case QEvent::TouchEnd:
    case QEvent::TouchCancel:
        systemIdleControl();
        return true;
    default:
        return QApplication::notify(receiver, event);
    }
}
如果您希望在调用
systemIdleControl
后按正常方式处理触摸事件,那么您当然可以删除
return true
,并将其设置为默认值


另一种方法是在
QCoreApplication::instance
上安装事件过滤器。
QCoreApplication::notify

的文档中描述了选项的完整列表。如果您想拦截所有触摸事件,无论触摸哪个小部件,一种方法是将
QApplication
子类化(或
QGuiApplication
,如果您选择的话)并重写其
notify
方法。差不多

class TouchResetApplication : public QApplication
{
    Q_OBJECT
    Q_DISABLE_COPY(TouchResetApplication)
public:
    TouchResetApplication(int&, char**);
protected:
    bool notify(QObject*, QEvent*) Q_DECL_OVERRIDE;
};


TouchResetApplication::TouchResetApplication(int& argc, char **argv)
    : QApplication(argc, argv)
{
}

bool TouchResetApplication::notify(QObject *receiver, QEvent *event)
{
    switch (event->type()) {
    case QEvent::TouchBegin:
    case QEvent::TouchUpdate:
    case QEvent::TouchEnd:
    case QEvent::TouchCancel:
        systemIdleControl();
        return true;
    default:
        return QApplication::notify(receiver, event);
    }
}
如果您希望在调用
systemIdleControl
后按正常方式处理触摸事件,那么您当然可以删除
return true
,并将其设置为默认值


另一种方法是在
QCoreApplication::instance
上安装事件过滤器。
QCoreApplication::notify

的文档中描述了选项的完整列表。如何将mousePressEvent连接到插槽“systemIdleControl”?如果您可以发出连接到插槽的信号,或者您可以直接调用该方法,或者您可以根据您的其他要求使用QMetaObject::invokeMethod。您能否解释一下我如何接收该触摸事件?如回答中所述,如果系统设置正确,触摸事件的接收方式与鼠标点击的接收方式相同。如果您有特定的问题或错误,请不要问精确的问题。我需要在触摸事件发生期间调用函数“systemIdleControl”。现在,如何在接收鼠标单击事件或我需要编写调用“systemIdleControl”的函数的位置。如何将mousePressEvent连接到插槽“systemIdleControl”?在事件中,您可以发出连接到插槽的信号,或者您可以直接调用该方法,或者您可以根据您的其他要求使用QMetaObject::invokeMethod。您能否解释一下我如何接收该触摸事件?如回答中所述,如果系统设置正确,触摸事件的接收方式与鼠标点击的接收方式相同。如果您有特定的问题或错误,请不要问精确的问题。我需要在触摸事件发生期间调用函数“systemIdleControl”。现在如何才能在接收鼠标点击事件或我需要编写调用“systemIdleControl”函数的地方。