2012-03-21 1 views
0

N8 (및 C7)을 대상으로하는 프로그램에 대한 터치 입력을 얻으려고하고 있으며 유지를위한 QList를 만들 수 없습니다 터치 포인트는 QTouchEvent :: touchPoints()를 사용합니다. 이 프로그램은 다음 줄에 충돌 : 이제Q 터치 포인트가 생성되지 않은 경우 "데이터 중단 예외가 발생했습니다"

bool GLWindow::event(QEvent *event) 
{ 
    switch (event->type()) { 
     case QEvent::TouchBegin: { 
      QList<QTouchEvent::TouchPoint> touchBeginPoints = 
         static_cast<QTouchEvent *>(event)->touchPoints(); 
      foreach (const QTouchEvent::TouchPoint &touchBeginPoint, touchBeginPoints) 
      { 
       float touchBeginX = touchBeginPoint.pos().x(); 
       float touchBeginY = touchBeginPoint.pos().y(); 
       qDebug() << "touchBeginPoint := " << touchBeginX << ", " << touchBeginY; 
      } 
      break; 
     } 
     case QEvent::TouchUpdate: { 
      // same as touch begin: getting touch point 
      break; 
     } 
     case QEvent::TouchEnd: { 
      // same as touch begin: getting touch point 
      break; 
     } 
     default: { 
      qDebug() << "Goodbye"; 
      return true; 
     } 
    } 
    return true; 
} 

, 내가 전에 용기와 함께 일한 적이있다

  • : Thread has crashed: A data abort exception has occurred accessing 0xee

    오버로드 된 이벤트 기능은 같다. 그러나 프로그램의 다른 부분에서 QList를 만들고 사용하는 것이 좋습니다. .pro 파일에 뭔가를 포함시켜야합니까? (대부분의 문제가 이것과 관련하여 결국 나와 관련이있는 것 같습니다.)

  • Qt와 Symbian에서 예외에 대해 읽었지만 그 대부분을 얻을 수는 없습니다. 그러나 3D 객체에 대한 텍스처를 제외하고 네트워킹이나 리소스 기반의 I/O 또는 조작을 수행하지 않습니다. 프로그램을 실행하는 동안 메모리 할당이 문제를 일으킬 수 있습니까?

기본적으로 나는 터치 포인트를 인쇄하려고합니다. 그러나 QList를 만들 수없는 이유는 단서가 없습니다. 코드가 잘 컴파일됩니다. 최선을 다했지만 (실패한) 터치 포인트 (QList를 필요로하지 않는 화면 좌표)의 화면 좌표를 가져 오는 다른 방법이 있습니까? 모든 의견을 환영합니다.

qt-project.org에서

[Reposting.]

+0

직설적인데, static_cast <>를 qobject_cast <>로 바꾸면 어떻게됩니까? – teukkam

+0

@teukkam 이벤트는 객체가 아닙니다. 어쩌면 dynamic_cast <> ... – UmNyobe

+0

@teukkam 'qobject_cast (QEvent * &)'를 호출 할 때 일치하는 함수가 없습니다. 나 또한 dynamic_cast <> 시도, 같은 결과를 제공합니다. 감사. –

답변

1

귀하의 구문은 100 % 정확 ... 당신이

(dynamic_cast<QTouchEvent *>(event))->touchPoints() 

공지 사항 괄호로

static_cast<QTouchEvent *>(event)->touchPoints() 

를 교체 할 때 어떻게됩니까 ... teukkam 지점을 강화하는 것 같다. 이 예제를 보자. http://www.developer.nokia.com/Community/Wiki/Painting_in_Qt

내가 생각할 때 QTouchEvent::touchPoints()은 스택 오버플로를 일으킬 정도로 큰 목록을 반환한다. 응용 프로그램의 스택 크기를 늘려보십시오.

+0

QList를 만들기 전에 qDebug() << static_cast (이벤트) -> touchPoints() -> size()를 사용하여 얼마나 큰 목록이 반환되는지 확인하십시오. – teukkam

+0

먼저 qDebug 문을 터치가 시작된 곳이 추락 한 곳입니다. 그런 다음 스위치 바깥쪽에 넣으면 이벤트 기능이 두 번만 호출되었습니다. 첫 번째 크기는 '0'이고 두 번째는 '54065912'입니다. 이것은 화면을 터치하지 않은 경우, 즉 앱 시작/초기화 중에 이벤트 함수가 호출되는 경우입니다. 그런 다음 fingerpainting 예제를 사용하여 똑같은 방법으로 시도한 결과, touchPoints QList의 크기는 대부분 1 ~ 2 회 이상 이었으므로 큰 목록 인수가 강화되었습니다. –

+0

포인트는 앱의 스택 크기를 늘려도 QList가 너무 커서 메모리 공간을 차지하지 못하게 할 수 있습니다. 그래서 어떻게 든 앱의 스택 크기가 아닌 크기를 관리해야한다고 생각하지만, 목록이 생성되는 즉시 문제가 발생하기 때문에 그렇게 할 수 없습니다. –

1

은 구문이 맞습니까? 컴파일 오류가

+0

아니요,'(dynamic_cast (event)) -> touchPoints()'는 괄호없이 static_cast <> 또는 dynamic_cast <>와 같은 결과를 나타냅니다. 화면을 터치하자마자 충돌이 발생합니다. 감사. –

관련 문제