从“QEvent*”到“QPaintEvent*”的转换无效

use*_*060 1 events qt qt4 qpainter touch-event

尝试查找触摸事件是否发生,或者只是绘制它们。

\n\n
\nbool MyWidget::event(QEvent *event)\n{\n    switch (event->type())\n    {\n            case QEvent::TouchBegin:\n            case QEvent::TouchUpdate:\n            case QEvent::TouchEnd: \n        {\n\n            QTouchEvent *touchEvent = static_cast(event);\n\n            if (touchEvent->touchPoints().count() == 2) \n            {\n                const QTouchEvent::TouchPoint &touchPoint1 = touchEvent->touchPoints().first();\n                const QTouchEvent::TouchPoint &touchPoint2 = touchEvent->touchPoints().last();\n                nx=touchPoint1.scenePos().x();\n                ny=touchPoint1.scenePos().y();\n                pix = QPixmap::grabWidget (this,nx,ny,1,1);\n                img = pix.toImage();\n                rgb = img.pixel(0,0);\n                color.setRgb(rgb);\n                drawBit=1;\n            }\n        break;\n         }\n\n            case QEvent::Paint:\n\n                  return MyWidget::paintEvent( event);  \n              break;\n\n         default:\n            return false;\n            break;\n    }\n\n     return true;\n}\n\n\n\nvoid MyWidget::paintEvent(QPaintEvent *event)\n{\n\ntime_counter++;\nfor(i=0;(ired,b[i]->green,b[i]->blue,255), Qt::SolidPattern));\npainter.drawEllipse(b[i]->x,b[i]->y,b[i]->w, b[i]->w);\npainter.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);\n\nif(b[i]->ballDead==false)\nb[i]->y+=b[i]->vy;\n\nif(drawBit==1 && b[i]->red==color.red() && b[i]->green==color.green() && b[i]->blue==color.blue())\nballHit(i);\n\n\n}\n}\n\n\n\n
Run Code Online (Sandbox Code Playgroud)\n\n
\n此代码显示如下错误:\nmywidget.cpp:116:47: 错误:从 \xe2\x80\x98QEvent*\xe2\x80\x99 到 \xe2\x80\x98QPaintEvent*\xe2\x80\x99\nmywidget 的无效转换.cpp:116:47: 错误: 初始化 \xe2\x80\x98virtual void MyWidget::paintEvent(QPaintEvent*)\xe2\x80\x99\nmywidget.cpp:116:47: 错误: void 值不被忽略应该是\n
\n

Mat*_*Mat 5

如果您想调用paintEvent,则需要强制转换QEvent*,如下所示:

paintEvent(static_cast<QPaintEvent*>(event));
return true;
Run Code Online (Sandbox Code Playgroud)

但正如其他人所说,如果您发现自己陷入无休止的重绘循环或事件循环卡住,请不要抱怨。

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