void QuickGuideWidget::PaintBubble(QPainter &pPainter, const QPoint &pStartPos, const QPoint &pEndPos, int pWidth, const QString &pContents) { #define BUBBLE_BOUND_WIDTH 10 #define BUBBLE_BOUND_HEIGHT 6 //用透明色绘制文字,获取文字的实际尺寸高度。 QFont font; font.setPointSize(this->height() / 50); pPainter.setFont(font); pPainter.setPen(Qt::transparent); QRect drawrect, textrect; if (pEndPos.y() > pStartPos.y()) { drawrect = QRect(pEndPos.x() - pWidth / 2, pEndPos.y(), pWidth, 1000); pPainter.drawText(drawrect, Qt::AlignHCenter | Qt::TextWordWrap, pContents, &textrect); textrect.adjust(0, BUBBLE_BOUND_HEIGHT, 0, BUBBLE_BOUND_HEIGHT); } else { drawrect = QRect(pEndPos.x() - pWidth / 2, pEndPos.y(), pWidth, 1000); pPainter.drawText(drawrect, Qt::AlignHCenter | Qt::TextWordWrap, pContents, &textrect); textrect.adjust(0, -textrect.height() - BUBBLE_BOUND_HEIGHT, 0, -textrect.height() - BUBBLE_BOUND_HEIGHT); } QRect bubblerect = textrect; bubblerect.adjust(-BUBBLE_BOUND_WIDTH, -BUBBLE_BOUND_HEIGHT, BUBBLE_BOUND_WIDTH, BUBBLE_BOUND_HEIGHT); //设置颜色。 QLinearGradient shapebrush(0, bubblerect.top(), 0, bubblerect.bottom()); shapebrush.setColorAt(0, QColor(227, 237, 255, 200)); shapebrush.setColorAt(1, QColor(165, 197, 255, 200)); pPainter.setBrush(shapebrush); QPen shapepen(QColor(74, 126, 187, 200), 2); pPainter.setPen(shapepen); //气泡。 QPoint polygon[7]; polygon[0] = QPoint(pEndPos.x() + BUBBLE_BOUND_HEIGHT, pEndPos.y()); polygon[1] = pStartPos; polygon[2] = QPoint(pEndPos.x() - BUBBLE_BOUND_HEIGHT, pEndPos.y()); if (pEndPos.y() > pStartPos.y()) { polygon[3] = bubblerect.topLeft(); polygon[4] = bubblerect.bottomLeft(); polygon[5] = bubblerect.bottomRight(); polygon[6] = bubblerect.topRight(); } else { polygon[3] = bubblerect.bottomLeft(); polygon[4] = bubblerect.topLeft(); polygon[5] = bubblerect.topRight(); polygon[6] = bubblerect.bottomRight(); } pPainter.drawPolygon(polygon, 7); //文字内容。 QPen textpen(QColor(36, 54, 72)); pPainter.setPen(textpen); pPainter.drawText(textrect, Qt::TextWordWrap, pContents); }
//Input Port #0: Buffer_Size = 1, Params_Type = SensorTimer_Sensor_Laser_Params, Data_Type = SensorTimer_Sensor_Laser_Data bool DECOFUNC(processMonoDrainData)(void * paramsPtr, void * varsPtr, QVector<void *> drainParams, QVector<void *> drainData) { VisualizationMono_Sensor_Laser_Params * params=(VisualizationMono_Sensor_Laser_Params *)paramsPtr; VisualizationMono_Sensor_Laser_Vars * vars=(VisualizationMono_Sensor_Laser_Vars *)varsPtr; QVector<SensorTimer_Sensor_Laser_Params *> drainparams; copyQVector(drainparams,drainParams); QVector<SensorTimer_Sensor_Laser_Data *> draindata; copyQVector(draindata,drainData); if(draindata.size()==0) { vars->beams->setText("No Data"); return 0; } /*======Please Program below======*/ /* Function: process draindata. */ vars->startangle=90+drainparams.front()->first_step*0.25; vars->endtangle=90+drainparams.front()->last_step*0.25; vars->resolution=drainparams.front()->skip_step*0.25; QImage image; if(params->frontonly) { image=QImage(params->imageradius*2,params->imageradius,QImage::Format_RGBA8888); } else { image=QImage(params->imageradius*2,params->imageradius*2,QImage::Format_RGBA8888); } image.fill(32); vars->painter.begin(&image); QPen centerpen(QColor(255,0,0,255)); QPen gridpen(QColor(0,255,0,128)); QPen beampen(QColor(0,0,255,196)); QPen textpen(Qt::black); int i,n; vars->painter.setPen(gridpen); vars->painter.setBrush(Qt::NoBrush); n=params->range/params->interval; int radiusstep=params->imageradius/n; int centerx=params->imageradius; int centery=params->imageradius; for(i=1;i<=n;i++) { int radius=i*radiusstep; vars->painter.drawEllipse(QPoint(centerx,centery),radius,radius); } centerx=params->imageradius-params->calib_width/2; centery=params->imageradius - params->calib_height; vars->painter.setPen(centerpen); vars->painter.setBrush(QBrush(Qt::red,Qt::SolidPattern)); vars->painter.drawEllipse(QPoint(centerx,centery),2,2); vars->painter.setPen(beampen); double ratio=double(params->imageradius)/double(params->range); n=draindata.front()->datasize; double pi=3.1415926535897932384626433832795/180.0; //left laser visual for(i=0;i<n;i++) { double theta=(vars->startangle+vars->resolution*i)*pi; double distance=ratio*(draindata.front()->ldata[i]); int x=int(distance*cos(theta)+0.5); int y=int(-distance*sin(theta)+0.5); if(params->laserbeam) { vars->painter.drawLine(centerx,centery,x+centerx,y+centery); } else { vars->painter.drawEllipse(x+centerx,y+centery,2,2); } } //right laser visual centerx=params->imageradius + params->calib_width/2; centery=params->imageradius - params->calib_height; vars->painter.setPen(centerpen); vars->painter.setBrush(QBrush(Qt::red,Qt::SolidPattern)); vars->painter.drawEllipse(QPoint(centerx,centery),2,2); vars->painter.setPen(beampen); for(i=0;i<n;i++) { double theta=(vars->startangle+vars->resolution*i)*pi; double distance=ratio*(draindata.front()->rdata[i]); int x=int(distance*cos(theta)+0.5); int y=int(-distance*sin(theta)+0.5); if(params->laserbeam) { vars->painter.drawLine(centerx,centery,x+centerx,y+centery); } else { vars->painter.drawEllipse(x+centerx,y+centery,2,2); } } QFontMetrics fm=vars->painter.fontMetrics(); int height=fm.ascent()+fm.descent(); vars->painter.setPen(textpen); vars->painter.drawText(0,height,QString("Interval = %1 cm").arg(params->interval)); vars->painter.drawText(0,height*2,QString("System Time: %1").arg(draindata.front()->qtimestamp.toString("HH:mm:ss:zzz"))); vars->painter.drawText(0,height*3,QString("URG Time: %1").arg(draindata.front()->timestamp)); vars->painter.end(); vars->beams->setPixmap(QPixmap::fromImage(image)); return 1; return 1; }
void MTopologyItem::Draw(QPixmap *pixmap) { if(pixmap == NULL) return; QPainter painter(pixmap); painter.save(); //painter.setRenderHint(QPainter::Antialiasing, true); painter.fillRect(pixmap->rect(),QBrush(QColor(233,246,254))); int ypos; ypos = (pixmap->height() - normal_icon_.height())/2; QPixmap bitmapicon; QColor bordercolor; QColor innerbordercolor; QLinearGradient textGradient; QColor textcolor; switch (status_) { case status_normal: bitmapicon = normal_icon_; bordercolor = normal_border_color_; innerbordercolor = normal_inner_border_color_; textGradient = normal_gradient_; textcolor = normal_name_color_; break; case status_abnormal: bitmapicon = abnormal_icon_; bordercolor = abnormal_border_color_; innerbordercolor = abnormal_inner_border_color_; textGradient = abnormal_gradient_; textcolor = abnormal_name_color_; break; case status_notwork: bitmapicon = notwork_icon_; bordercolor = notwork_border_color_; innerbordercolor = notwork_inner_border_color_; textGradient = notwork_gradient_; textcolor = notwork_name_color_; break; case status_currentstatus: if(status_backup_ == status_normal) { bitmapicon = normal_icon_; } else if(status_backup_ == status_abnormal) { bitmapicon = abnormal_icon_; } else if(status_backup_ == status_notwork) { bitmapicon = notwork_icon_; } bordercolor = currentstatus_border_color_; innerbordercolor = currentstatus_inner_border_color_; textGradient = currentstatus_gradient_; textcolor = currentstatus_name_color_; break; default: bitmapicon = normal_icon_; bordercolor = normal_border_color_; innerbordercolor = normal_inner_border_color_; textGradient = normal_gradient_; textcolor = normal_name_color_; break; } painter.drawPixmap(0,ypos,bitmapicon); // QRect borderrect; // borderrect.setTop(0); // borderrect.setBottom(pixmap->height() - 1); // borderrect.setLeft(bitmapicon.width()); // borderrect.setRight(pixmap->width() - 1); // painter.setBrush(QBrush(bordercolor)); // painter.drawRoundedRect(borderrect,xradius_,yradius_,Qt::RelativeSize); // QRect innerborderrect; // innerborderrect.setTop(border_width_); // innerborderrect.setBottom(pixmap->height() - 1 - border_width_*2); // innerborderrect.setLeft(bitmapicon.width() + border_width_); // innerborderrect.setRight(pixmap->width() - 1 - border_width_*2); // painter.setBrush(QBrush(QColor(121,222,112))); // painter.drawRoundedRect(innerborderrect,xradius_,yradius_,Qt::RelativeSize); QRect textrect; textrect.setTop(border_width_); textrect.setBottom(pixmap->height() - 1 - border_width_*2); textrect.setLeft(bitmapicon.width() + border_width_); textrect.setRight(pixmap->width() - 1 - border_width_*2); QBrush textbrush(textGradient); QPen borderpen(bordercolor); painter.setPen(borderpen); painter.setBrush(textbrush); painter.drawRoundedRect(textrect,xradius_,yradius_,Qt::AbsoluteSize); QPen textpen(textcolor); painter.setPen(textpen); painter.drawText(textrect,Qt::AlignCenter,name_ ); painter.restore(); }