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

时间:2011-11-28 07:29:18

标签: qt

在Qt中触摸屏幕时是否有任何接收方式。无论何时触摸触摸屏,我都需要将计数器重置为0.

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

2 个答案:

答案 0 :(得分:1)

如果您想拦截所有触摸事件,无论触摸哪个窗口小部件,一种方法是子类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的文档中描述了完整的选项列表。

答案 1 :(得分:0)

如果您的环境和平台设置正确,那么您应该在QWidget中接收触摸事件作为mousePressEvent。 从那里你应该打电话给你的功能。