1

QTouchEvent 在与屏幕的任何交互中总是被调用 4 次。即使我只是触摸屏幕 0.1 秒(不移动也不松开手指)。因此,当触摸实际结束或更新时,我无法获得信息。

bool ChartPlotter::touchEvent(QTouchEvent* ev) {

    switch (ev->type()) {
       case QTouchEvent::TouchBegin: {
           __android_log_write(ANDROID_LOG_WARN,"","begin");
       }
       case QTouchEvent::TouchUpdate: {
        __android_log_write(ANDROID_LOG_WARN,"","update");
    }
       case QTouchEvent::TouchEnd: {
             __android_log_write(ANDROID_LOG_WARN,"","end");
    }
 ...

以及我刚刚触摸屏幕时的输出(我没有移动手指,也没有松开它,我只是触摸并按住它在同一个地方)

W   : begin
W   : update
W   : end
W   : end
``
4

1 回答 1

3

您缺少一个breakfor each case,因为这样它将通过所有情况。

{}对于这种情况,您不需要 a ,这样就可以了:

bool ChartPlotter::touchEvent(QTouchEvent* ev) {

switch (ev->type()) {
   case QTouchEvent::TouchBegin:
       __android_log_write(ANDROID_LOG_WARN,"","begin");
   break;

   case QTouchEvent::TouchUpdate: 
       __android_log_write(ANDROID_LOG_WARN,"","update");
   break;

   case QTouchEvent::TouchEnd:
       __android_log_write(ANDROID_LOG_WARN,"","end");
   break;
}
...

由于您制作了一个TouchBegin事件,它会打印出所有 3 个日志(因为没有中断来阻止它们),一旦您释放新闻,TouchEnd就会触发,因此您已经end打印了两次。

于 2019-08-04T14:13:01.673 回答