2011-11-28 32 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的文檔中描述了您的選項的完整列表。