Exemplo n.º 1
0
void PieSliceItem::updateGeometry()
{
    if (m_data.m_radius <= 0)
        return;

    prepareGeometryChange();

    // update slice path
    qreal centerAngle;
    QPointF armStart;
    m_slicePath = slicePath(m_data.m_center, m_data.m_radius, m_data.m_startAngle, m_data.m_angleSpan, &centerAngle, &armStart);

    // update text rect
    m_labelTextRect = labelTextRect(m_data.m_labelFont, m_data.m_labelText);

    // update label arm path
    QPointF labelTextStart;
    m_labelArmPath = labelArmPath(armStart, centerAngle, m_data.m_radius * m_data.m_labelArmLengthFactor, m_labelTextRect.width(), &labelTextStart);

    // update text position
    m_labelTextRect.moveBottomLeft(labelTextStart);

    // update bounding rect
    if (m_data.m_isLabelVisible)
        m_boundingRect = m_slicePath.boundingRect().united(m_labelArmPath.boundingRect()).united(m_labelTextRect);
    else
        m_boundingRect = m_slicePath.boundingRect();
}
void clQmlCircularBar::paint(QPainter *painter)
{
    //AntiAliasing
    painter->setRenderHint(QPainter::Antialiasing);
    painter->setRenderHint(QPainter::HighQualityAntialiasing);
    painter->setRenderHint(QPainter::SmoothPixmapTransform);

    QRectF rect = this->boundingRect();
    painter->setPen(Qt::NoPen);

    QPainterPath slicePath(QPointF(rect.width()/2, rect.height()/2));
    slicePath.lineTo(0, rect.height()/2);
    slicePath.arcTo(rect, __start_angle, __span_angle);
    slicePath.lineTo(rect.width()/2, rect.height()/2);
    slicePath.closeSubpath();

    painter->setClipRegion(slicePath.toFillPolygon().toPolygon());
    painter->drawImage(rect,__barImage);
}