##// END OF EJS Templates
Fix issue with pie label not drawn correctly when first created
Jani Honkonen -
r209:c977a59b6d90
parent child
Show More
@@ -130,6 +130,8 void PiePresenter::addSlice(QPieSlice* sliceData)
130 PieSlice *slice = new PieSlice(this);
130 PieSlice *slice = new PieSlice(this);
131 slice->setPieRect(m_pieRect);
131 slice->setPieRect(m_pieRect);
132 slice->updateData(sliceData);
132 slice->updateData(sliceData);
133 slice->updateGeometry();
134 slice->update();
133 m_slices.insert(sliceData, slice);
135 m_slices.insert(sliceData, slice);
134
136
135 // connect signals
137 // connect signals
@@ -101,7 +101,6 void PieSlice::updateGeometry()
101 // update label position
101 // update label position
102 qreal radius = rect.height() / 2;
102 qreal radius = rect.height() / 2;
103 QPointF edgeCenter = rect.center() + offset(centerAngle, radius + 5);
103 QPointF edgeCenter = rect.center() + offset(centerAngle, radius + 5);
104
105 m_slicelabel->setArmStartPoint(edgeCenter);
104 m_slicelabel->setArmStartPoint(edgeCenter);
106 m_slicelabel->setArmAngle(centerAngle);
105 m_slicelabel->setArmAngle(centerAngle);
107 m_slicelabel->updateGeometry();
106 m_slicelabel->updateGeometry();
@@ -126,15 +125,14 void PieSlice::updateData(const QPieSlice* sliceData)
126 m_pen = sliceData->pen();
125 m_pen = sliceData->pen();
127 m_brush = sliceData->brush();
126 m_brush = sliceData->brush();
128
127
129 updateGeometry();
130 update();
131
132 m_slicelabel->setVisible(sliceData->isLabelVisible());
128 m_slicelabel->setVisible(sliceData->isLabelVisible());
133 m_slicelabel->setText(sliceData->label());
129 m_slicelabel->setText(sliceData->label());
134 m_slicelabel->setPen(sliceData->labelPen());
130 m_slicelabel->setPen(sliceData->labelPen());
135 m_slicelabel->setFont(sliceData->labelFont());
131 m_slicelabel->setFont(sliceData->labelFont());
136 m_slicelabel->setArmLength(sliceData->labelArmLenght());
132 m_slicelabel->setArmLength(sliceData->labelArmLenght());
137 m_slicelabel->updateGeometry(); // text size & font modifies the geometry
133
134 updateGeometry();
135 update();
138 m_slicelabel->update();
136 m_slicelabel->update();
139 }
137 }
140
138
@@ -2,16 +2,18
2 #include <QPainter>
2 #include <QPainter>
3 #include <qmath.h>
3 #include <qmath.h>
4 #include <QGraphicsTextItem>
4 #include <QGraphicsTextItem>
5 #include <QDebug>
5
6
6 QTCOMMERCIALCHART_BEGIN_NAMESPACE
7 QTCOMMERCIALCHART_BEGIN_NAMESPACE
7
8
8 #define PI 3.14159265
9 #define PI 3.14159265
9
10
10 PieSliceLabel::PieSliceLabel(QGraphicsItem* parent)
11 PieSliceLabel::PieSliceLabel(QGraphicsItem* parent)
11 :QGraphicsItem(parent)
12 :QGraphicsItem(parent),
13 m_armAngle(0),
14 m_armLength(0)
12 {
15 {
13 // set defaults
16
14 m_pen = QPen(Qt::black);
15 }
17 }
16
18
17 void PieSliceLabel::paint(QPainter *painter, const QStyleOptionGraphicsItem* /*option*/, QWidget* /*widget*/)
19 void PieSliceLabel::paint(QPainter *painter, const QStyleOptionGraphicsItem* /*option*/, QWidget* /*widget*/)
@@ -24,6 +26,8 void PieSliceLabel::paint(QPainter *painter, const QStyleOptionGraphicsItem* /*o
24 // TODO: do we need a pen for text?
26 // TODO: do we need a pen for text?
25 painter->setFont(m_font);
27 painter->setFont(m_font);
26 painter->drawText(m_textRect, m_text);
28 painter->drawText(m_textRect, m_text);
29
30 //qDebug() << "PieSliceLabel::paint" << m_text << m_textRect;
27 }
31 }
28
32
29 void PieSliceLabel::updateGeometry()
33 void PieSliceLabel::updateGeometry()
@@ -59,6 +63,8 void PieSliceLabel::updateGeometry()
59 m_armPath = path;
63 m_armPath = path;
60 m_textRect = textRect;
64 m_textRect = textRect;
61 m_rect = path.boundingRect().united(m_textRect);
65 m_rect = path.boundingRect().united(m_textRect);
66
67 //qDebug() << "PieSliceLabel::updateGeometry" << m_text << m_armStartPoint << m_armLength << m_armAngle << m_textRect;
62 }
68 }
63
69
64 QTCOMMERCIALCHART_END_NAMESPACE
70 QTCOMMERCIALCHART_END_NAMESPACE
General Comments 0
You need to be logged in to leave comments. Login now