2011-11-28 265 views
1

在Qt中触摸屏幕时有什么方法可以接收。无论何时触摸触摸屏,我都需要将计数器重置为0。如何在Qt中接收触摸事件?

我有功能systemIdleControl重置计数器为零。所以当我触摸触摸屏时,应该调用systemIdleControl

回答

0

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

+0

如何将mousePressEvent连接到插槽'systemIdleControl'? – Shyam

+0

如果您可以发出连接到插槽的信号,或者您可以直接调用该方法,或者您可以根据其他要求使用QMetaObject :: invokeMethod。 –

+0

你能否解释一下我该如何接收这个触摸事件? – Shyam

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的文档中描述了您的选项的完整列表。