コード例 #1
0
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);
}
コード例 #2
0
//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;
}
コード例 #3
0
ファイル: mtopologylabel.cpp プロジェクト: leeych/MSRTS
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();
}