2011-06-13 3 views
1

タッチイベントが発生したかどうかを見つけようとしています。'QEvent *'から 'QPaintEvent *'への無効な変換


bool MyWidget::event(QEvent *event) 
{ 
    switch (event->type()) 
    { 
      case QEvent::TouchBegin: 
      case QEvent::TouchUpdate: 
      case QEvent::TouchEnd: 
     { 

      QTouchEvent *touchEvent = static_cast(event); 

      if (touchEvent->touchPoints().count() == 2) 
      { 
       const QTouchEvent::TouchPoint &touchPoint1 = touchEvent->touchPoints().first(); 
       const QTouchEvent::TouchPoint &touchPoint2 = touchEvent->touchPoints().last(); 
       nx=touchPoint1.scenePos().x(); 
       ny=touchPoint1.scenePos().y(); 
       pix = QPixmap::grabWidget (this,nx,ny,1,1); 
       img = pix.toImage(); 
       rgb = img.pixel(0,0); 
       color.setRgb(rgb); 
       drawBit=1; 
      } 
     break; 
     } 

      case QEvent::Paint: 

        return MyWidget::paintEvent(event); 
       break; 

     default: 
      return false; 
      break; 
    } 

    return true; 
} 



void MyWidget::paintEvent(QPaintEvent *event) 
{ 

time_counter++; 
for(i=0;(ired,b[i]->green,b[i]->blue,255), Qt::SolidPattern)); 
painter.drawEllipse(b[i]->x,b[i]->y,b[i]->w, b[i]->w); 
painter.drawLine(b[i]->x+b[i]->w/2,b[i]->y+b[i]->w,b[i]->x+b[i]->w/2,b[i]->y+2*b[i]->w); 

if(b[i]->ballDead==false) 
b[i]->y+=b[i]->vy; 

if(drawBit==1 && b[i]->red==color.red() && b[i]->green==color.green() && b[i]->blue==color.blue()) 
ballHit(i); 


} 
} 



 
this code shows error like: 
mywidget.cpp:116:47: error: invalid conversion from ‘QEvent*’ to ‘QPaintEvent*’ 
mywidget.cpp:116:47: error: initializing argument 1 of ‘virtual void MyWidget::paintEvent(QPaintEvent*)’ 
mywidget.cpp:116:47: error: void value not ignored as it ought to be 
+0

が含まれていますか? – red1ynx

+1

そして、 'return MyWidget :: paintEvent(event);'は 'bool'ではなく' void'を返すので、書くことはできません。 – red1ynx

+0

あなたはたぶんタッチイベントを処理し、残りのハンドラの結果を返すだけです: 'return QWidget :: event(event);'これは他のイベントタイプの* all *を正しく処理します。 –

答えて

3

そのない良い習慣は、右のパラメータでpaintEvent()を呼び出しますpaintEvent()directly.Call repaint()またはupdate() instead.Thoseメソッドを呼び出します。

+0

もう一度MyWidget :: event()によって収集されます。それはすべてのイベントの儀式を収集します。だから何とか私はpaintEvent()を呼び出す必要があります – user767060

+0

あなたは何もするつもりはありません..ちょうど 'イベント()'メソッドでQEvent :: Paintのケースを処理しないでください。再描画/更新を呼び出すと、paintEventメソッドが呼び出されます。 – Abhijith

+0

私はイベント機能を呼び出そうとしましたが、それは機能しません。私はそれを – user767060

3

あなたがpaintEventを呼び出したい場合、あなたは、のようなものQEvent*をキャストする必要があります:

paintEvent(static_cast<QPaintEvent*>(event)); 
return true; 

をしかし、他の人が言ってきたように、あなたが無限再描画ループに自分自身を見つける場合は、文句は来ていませんまたは別の方法でスタックされたイベントループを使用します。

定期的に再描画したい場合は、QTimerを設定し、あなたにウィジェットのupdate()スロットを呼び出させてください。

関連する問題