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, ¢erAngle, &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); }