2012-03-21 21 views
0

N8(およびC7)を対象としたプログラムのタッチ入力を取得しようとしていますが、タッチポイントは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%正しいです。 http://www.developer.nokia.com/Community/Wiki/Painting_in_Qt

私が推測していることは、QTouchEvent::touchPoints()がスタックをオーバーフローさせるほど大きなリストを返すということです。アプリケーションのスタックサイズを増やしてみてください。

+0

QListを作成する前にqDebug()<< static_cast (イベント) - > touchPoints() - > size()を実行して、返されるリストの大きさを確認してください。 – teukkam

+0

qDebugステートメントは、それがクラッシュした場所でタッチを開始するケース。それから私はそれをスイッチの外に置き、イベント機能は2回だけ呼ばれました。最初にサイズが「0」で、2回目に「54065912」でした。これは、画面に触れていないとき、つまりアプリケーションの起動/初期化中にイベント関数が呼び出されたときです。それから、私は指先の例で同じことを試みました。そして、touchPoints QListのサイズは大部分(2〜3を超えることはありません)でした。 –

+0

ポイントは、私のアプリのスタックサイズを増やしても、QListが大きすぎてメモリスペースを取ることができません。だから私は何とかそのサイズ(とアプリのスタックサイズではない)の世話をする必要があると思うが、私はリストが作成されるとすぐにクラッシュするので、私はできません。 –

1

は、あなたの構文が正しいですか?コンパイルエラーは、あなたが

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

お知らせ括弧をして

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

を置き換えるとどう ... teukkamポイントを強化するようです...

+0

いいえ、 '(dynamic_cast (event)) - > touchPoints()'はstatic_cast <>やdynamic_cast <>と同じ結果になりますが、かっこは表示されません。ありがとう。 –

関連する問題