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\nRun 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
如果您想调用paintEvent,则需要强制转换QEvent*,如下所示:
paintEvent(static_cast<QPaintEvent*>(event));
return true;
Run Code Online (Sandbox Code Playgroud)
但正如其他人所说,如果您发现自己陷入无休止的重绘循环或事件循环卡住,请不要抱怨。
如果您想要定期重新绘制,请设置一个QTimer并让它调用您的小部件的update()插槽。