Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 从‘;QEvent*’;至‘;QPaintEvent*’;_Qt_Events_Qt4_Qpainter_Touch Event - Fatal编程技术网

Qt 从‘;QEvent*’;至‘;QPaintEvent*’;

Qt 从‘;QEvent*’;至‘;QPaintEvent*’;,qt,events,qt4,qpainter,touch-event,Qt,Events,Qt4,Qpainter,Touch Event,试图找出是否发生了触摸事件,或者只是画它们 bool MyWidget::event(QEvent *event) { switch (event->type()) { case QEvent::TouchBegin: case QEvent::TouchUpdate: case QEvent::TouchEnd: { QTouchEvent *touchEven

试图找出是否发生了触摸事件,或者只是画它们


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);


}
}



此代码显示如下错误: mywidget.cpp:116:47:错误:从“QEvent*”到“QPaintEvent*”的转换无效 mywidget.cpp:116:47:错误:初始化“virtual void mywidget::paintEvent(QPaintEvent*)”的参数1 mywidget.cpp:116:47:错误:无效值未被忽略,因为它应该被忽略
直接调用paintEvent()不是一个好的做法。请调用
repaint()
update()
。然后这些方法将使用正确的参数调用
paintEvent()

直接调用paintEvent()不是一个好的做法。调用
repaint()
update()
取而代之。然后,这些方法将使用正确的参数调用
paintEvent()

如果要调用
paintEvent
,则需要强制转换
QEvent*
,类似于:

paintEvent(static_cast<QPaintEvent*>(event));
return true;
paintEvent(静态施法(事件));
返回true;
但正如其他人所说,如果您发现自己处于一个无休止的重新绘制循环中,或者遇到了一个卡住的事件循环,请不要抱怨


如果需要定期重新绘制,请设置一个
QTimer
,并让它调用小部件的
update()
插槽。

如果要调用
paintEvent
,则需要强制转换
QEvent*
,类似于:

paintEvent(static_cast<QPaintEvent*>(event));
return true;
paintEvent(静态施法(事件));
返回true;
但正如其他人所说,如果您发现自己处于一个无休止的重新绘制循环中,或者遇到了一个卡住的事件循环,请不要抱怨


如果您想要定期重新绘制,请设置一个
QTimer
,并让它调用小部件的
update()
插槽。

可能您忘记了包含?并且您无法编写
返回MyWidget::paintEvent(事件)
因为它返回的是
void
,而不是
bool
。您可能只想处理touch事件,然后返回父处理程序的剩余结果:
return QWidget::event(event)这将正确处理所有其他事件类型。可能您忘记了包含?并且无法编写
返回MyWidget::paintEvent(事件)
因为它返回的是
void
,而不是
bool
。您可能只想处理touch事件,然后返回父处理程序的剩余结果:
return QWidget::event(event)这将正确处理所有其他事件类型。但它将再次由MyWidget::event()收集。它收集所有事件。所以我应该调用paintEvent()你不应该做任何事情。。只是不要在
event()
方法中处理QEvent::Paint案例。当您调用repaint/update时,将调用paintEvent方法。我尝试调用event函数,但无效。我应该在哪里调用它你可以在任何地方调用它,只是不能在paintEvent()或event()方法中调用。我已经在使用计时器每25毫秒调用一次update,但是所有事件都将被MyWidget::event()rite吸收…但它将被MyWidget::event()收集。它收集所有事件。所以我应该调用paintEvent()你不应该做任何事情。。只是不要在
event()
方法中处理QEvent::Paint案例。当您调用repaint/update时,将调用paintEvent方法。我尝试调用event函数,但无效。我应该在哪里调用它你可以在任何地方调用它,只是不能在paintEvent()或event()方法中调用。我已经使用计时器每25毫秒调用一次update,但所有事件都将被MyWidget::event()方法吸收。。。