コード例 #1
0
ファイル: mygauge1.cpp プロジェクト: aizaimenghuangu/test
void myGauge1::drawMarkAndText(QPainter* painter)
{
    painter->save();
    painter->translate(m_center);

    int value=0;
    QString strValue;
    qreal startAngle=90;
    qreal increment=(qreal)180/100;

    for(int i=0;i<=100;i++)
    {
        painter->save();
        painter->rotate(startAngle);
        if(i%10==0)
        {
            painter->setPen(QColor(16,49,98));
            QPointF bottomPot(0,m_colorPieRadius+m_space);
            QPointF topPot(0,m_colorPieRadius+m_space+m_longHand);
            painter->drawLine(bottomPot,topPot);

            strValue=tr("%1").arg(value);
            qreal textWidth=fontMetrics().width(strValue);
            qreal textHeight=fontMetrics().height();
            QPointF textPot(-textWidth/2,m_colorPieRadius+2*m_space+m_longHand+textHeight);
            painter->save();
            painter->translate(textPot);
            painter->rotate(180);
            painter->drawText(QPointF(-textWidth,textHeight/2),strValue);
            painter->restore();
            value+=10;

        }
        else if(i%5==0)
        {

            painter->setPen(QColor(0,255,17));
            QPointF bottomPot(0,m_colorPieRadius+m_space);
            QPointF topPot(0,m_colorPieRadius+m_space+m_okHand);
            painter->drawLine(bottomPot,topPot);
        }
        else
        {

            painter->setPen(QColor(255,170,0));
            QPointF bottomPot(0,m_colorPieRadius+m_space);
            QPointF topPot(0,m_colorPieRadius+m_space+m_shortHand);
            painter->drawLine(bottomPot,topPot);
        }
        startAngle+=increment;
        painter->restore();
    }
    painter->restore();
}
コード例 #2
0
ファイル: thermometer.cpp プロジェクト: radtek/isoftstone
void CThermoMeterItem::drawMark(QPainter *painter)
{
    painter->save();

    qreal initY=m_topSpace;
    qreal initX=m_markSpace;
    qreal length=boundingRect().height()-2*m_topSpace;
    qreal increment=length/100;
    painter->setPen(m_markClr);

    // draw vertical line
    QPointF topPot(m_markSpace,m_topSpace);
    QPointF bottomPot(m_markSpace,boundingRect().height()-m_topSpace);
    painter->drawLine(topPot,bottomPot);

    int vvalue=100;
    QString strValue;
    for(int i=0;i<=100;i++)
    {
        if(i%10==0)
        {
            QPointF leftPot(initX+LONG3,initY);
            QPointF rightPot(initX,initY);
            painter->drawLine(leftPot,rightPot);

            strValue=tr("%1").arg(vvalue);
            qreal fontWidth=painter->fontMetrics().width(strValue);
            qreal fontHeight=painter->fontMetrics().height();

            QPointF textPot(initX-fontWidth-5,initY+fontHeight/2);
            painter->drawText(textPot,strValue);

            vvalue-=10;

        }
        else if(i%5==0 && i%10!=0)
        {
            QPointF leftPot(initX+OK3,initY);
            QPointF rightPot(initX,initY);
            painter->drawLine(leftPot,rightPot);
        }
        else
        {
            QPointF leftPot(initX+SHORT3,initY);
            QPointF rightPot(initX,initY);
            painter->drawLine(leftPot,rightPot);
        }
        initY+=increment;
    }
    painter->restore();
}
コード例 #3
0
ファイル: mygauge2.cpp プロジェクト: aizaimenghuangu/test
void myGauge2::drawMark(QPainter *painter)
{
    painter->save();
    painter->setPen(Qt::white);
    painter->translate(m_center);

    qreal dAngle=(qreal)270/100;
    qreal startAngle=45;
    int value=0;
    QString strValue;
    for(int i=0;i<=100;i++)
    {
        painter->save();
        painter->rotate(startAngle);

        if(i%10==0)
        {
            strValue=tr("%1").arg(value);
            qreal textWidth=fontMetrics().width(strValue);
            qreal textHeight=fontMetrics().height();
            QPointF bottomPot(0,m_colorCircleRadius+SPACE1);
            QPointF topPot(0,m_colorCircleRadius+SPACE1+LONG1);
            painter->drawLine(bottomPot,topPot);
            value+=10;

            painter->save();
            QPointF textPot(0-textWidth/2,m_colorCircleRadius+SPACE1+LONG1+SPACE1+textHeight);
            painter->translate(textPot);
            painter->rotate(180);
            painter->drawText(QPointF(-textWidth,textHeight/2),strValue);
            painter->restore();            
        }
        else if(i%5==0)
        {
            QPointF bottomPot(0,m_colorCircleRadius+SPACE1);
            QPointF topPot(0,m_colorCircleRadius+SPACE1+OK1);
            painter->drawLine(bottomPot,topPot);

        }
        else
        {
            QPointF bottomPot(0,m_colorCircleRadius+SPACE1);
            QPointF topPot(0,m_colorCircleRadius+SPACE1+SHORT1);
            painter->drawLine(bottomPot,topPot);
        }
        painter->restore();
        startAngle+=dAngle;
    }
    painter->restore();
}
コード例 #4
0
ファイル: sliderruler.cpp プロジェクト: nameqiaohe/quc
void SliderRuler::drawRule(QPainter *painter)
{
    painter->save();
    painter->setPen(lineColor);

    //绘制横向标尺底部线,居中
    double initX = space;
    double initY = (double)height() / 2;
    lineLeftPot = QPointF(initX, initY);
    lineRightPot = QPointF(width() - initX, initY);
    painter->drawLine(lineLeftPot, lineRightPot);

    //绘制纵向标尺刻度
    double length = width() - 2 * space;
    //计算每一格移动多少
    double increment = length / (maxValue - minValue);

    //根据范围值绘制刻度值及刻度值
    for (int i = minValue; i <= maxValue; i = i + shortStep) {
        if (i % longStep == 0) {
            QPointF topPot(initX, initY - longLineHeight);
            QPointF bottomPot(initX, initY);
            painter->drawLine(topPot, bottomPot);

            QString strValue = QString("%1").arg((double)i, 0, 'f', precision);
            double textWidth = fontMetrics().width(strValue);
            double textHeight = fontMetrics().height();
            QPointF textPot(initX - textWidth / 2, initY + textHeight);
            painter->drawText(textPot, strValue);
        } else {
            QPointF topPot(initX, initY - shortLineHeight);
            QPointF bottomPot(initX, initY);
            painter->drawLine(topPot, bottomPot);
        }

        initX += increment * shortStep;
    }

    painter->restore();
}
コード例 #5
0
ファイル: drawprogressbar.cpp プロジェクト: Jinxiaohai/QT
void DrawProgressBar::drawBarBackground(QPainter* painter)
{
    for (int i = 0; i < iMaxNum; i++)
    {
        //绘制灰色圆
        painter->save();
        painter->setPen(QColor(100,100,100));
        painter->setBrush(QColor(100,100,100));
        QPointF pot(RECT_WIDTH + i*(iBigRadius + rectWidth), height()/2);
        painter->drawEllipse(pot, iBigRadius, iBigRadius);
        painter->restore();


        //绘制灰色的矩形-比圆少一个
        if (i > 0)
        {
            painter->save();
            painter->setPen(QColor(100,100,100));
            painter->setBrush(QColor(100,100,100));
            painter->drawRect(RECT_WIDTH + iBigRadius/2 + (i-1)*(rectWidth + iBigRadius), height()/2 - rectHight/2, rectWidth, rectHight);
            painter->restore();
        }

        //绘制圆形下的文本-灰色
        painter->save();
        painter->setPen(QColor(100,100,100));
        QFont ft;
        ft.setPointSize(12);
        painter->setFont(ft);
        qreal textWidth = fontMetrics().width(strlist[i]);
        //qreal textHeight = fontMetrics().height();
        QPointF textPot(RECT_WIDTH - iBigRadius/2 - textWidth/2 + i*(rectWidth + iBigRadius), height()/2 + iBigRadius/2 + 35);//iBigRadius/2表示灰色圆半径,35为向下偏移量
        painter->drawText(textPot, strlist[i]);
        painter->restore();
    }

}
コード例 #6
0
ファイル: drawprogressbar.cpp プロジェクト: Jinxiaohai/QT
void DrawProgressBar::drawBlueBar(QPainter* painter)
{
    if (m_value > iMaxNum || m_value < 1)
    {
        return;
    }

    QPointF pt;
    for (int i = 0; i < m_value; i++)
    {
        //绘制蓝色的圆
        painter->save();
        painter->setPen(QColor(100,185,255));
        painter->setBrush(QColor(100,185,255));
        pt = QPointF(RECT_WIDTH + i*(rectWidth + iBigRadius), height()/2);
        painter->drawEllipse(pt, iSmallRadius, iSmallRadius);
        painter->restore();

        //绘制长条-蓝色-比圆少一个
        painter->save();
        painter->setPen(QColor(100,185,255));
        painter->setBrush(QColor(100,185,255));
        if (m_value == 1)
        {
            painter->drawRect(RECT_WIDTH + iBigRadius/2, height()/2 - rectBlueHight/2, rectWidth/2, rectBlueHight);
        }

        if (i > 0)
        {
            if (m_value == iMaxNum)
            {
                painter->drawRect(RECT_WIDTH + iBigRadius/2 + (i-1)*(rectWidth + iBigRadius), height()/2 - rectBlueHight/2, rectWidth, rectBlueHight);
            }
            else
            {
                painter->drawRect(RECT_WIDTH + iBigRadius/2 + (i-1)*(rectWidth + iBigRadius), height()/2 - rectBlueHight/2, rectWidth + rectWidth*2/3, rectBlueHight);
            }
        }
        painter->restore();

        //绘制圆形下的文本-蓝色
        painter->save();
        painter->setPen(QColor(100,185,255));
        QFont ft;
        ft.setPointSize(12);
        painter->setFont(ft);
        qreal textWidth = fontMetrics().width(strlist[i]);
        //qreal textHeight = fontMetrics().height();
        QPointF textPot(RECT_WIDTH - iBigRadius/2 - textWidth/2 + i*(rectWidth + iBigRadius), height()/2 + iBigRadius/2 + 35);//iBigRadius/2表示灰色圆半径,35为向下偏移量
        painter->drawText(textPot, strlist[i]);
        painter->restore();


        //绘制进度条上方的图形及文本
        QColor color = QColor(24,189,155);
        //绘制椭圆
        painter->save();
        painter->setPen(color);
        painter->setBrush(color);
        QRect rect(RECT_WIDTH - 78/2 + (m_value - 1)*(rectWidth + iBigRadius), height()/2 - 60,78,25);
        painter->drawRoundedRect(rect, 10,10);
        painter->restore();
        //文本
        painter->save();
        painter->setPen(Qt::white);
        ft.setPointSize(10);
        ft.setBold(true);
        painter->setFont(ft);
        qreal textWidth2=fontMetrics().width(str_list2[i]);
        qreal textHeight2=fontMetrics().height();
        QPointF textPt(RECT_WIDTH - textWidth2/2 - 1 + (m_value - 1)*(rectWidth + iBigRadius), height()/2 - 60 + 25/2+ textHeight2/2);
        painter->drawText(textPt, str_list2[i]);
        painter->restore();
        //绘制三角形
        painter->save();
        painter->setPen(color);
        painter->setBrush(color);
        QPointF firstPt(RECT_WIDTH + (m_value - 1)*(rectWidth + iBigRadius) - 10, height()/2 - 60 + 25);
        QPointF secondPt(RECT_WIDTH + 20 + (m_value - 1)*(rectWidth + iBigRadius) - 10, height()/2 - 60 + 25);
        QPointF thiirdPt(RECT_WIDTH + 10 + (m_value - 1)*(rectWidth + iBigRadius) - 10, height()/2 - 60 + 25 + 10);
        QPolygonF polygon;
        polygon << firstPt << secondPt << thiirdPt;
        painter->drawPolygon(polygon);

        painter->restore();
    }

}