15 #include <QGraphicsScene>
16 #include <QPainterPath>
50 m_scene =
new QGraphicsScene();
56 if (m_scene && m_scene->sceneRect().intersects(rect)) {
57 const QList<QGraphicsItem *> items = m_scene->items(rect);
58 QModelIndexList indexes;
59 for (QGraphicsItem *item : items) {
60 auto *i = qgraphicsitem_cast<ChartGraphicsItem *>(item);
62 QModelIndex index(m_diagram->model()->index(i->row(), i->column(), m_diagram->rootIndex()));
68 return QModelIndexList();
75 if (m_scene && m_scene->sceneRect().contains(point)) {
76 const QList<QGraphicsItem *> items = m_scene->items(point);
77 QModelIndexList indexes;
78 for (QGraphicsItem *item : items) {
79 auto *i = qgraphicsitem_cast<ChartGraphicsItem *>(item);
81 QModelIndex index(m_diagram->model()->index(i->row(), i->column(), m_diagram->rootIndex()));
82 if (!indexes.contains(index))
88 return QModelIndexList();
94 if (!m_diagram->model()->hasIndex(row, column, m_diagram->rootIndex()))
96 const QModelIndex index = m_diagram->model()->index(row, column, m_diagram->rootIndex());
97 return m_itemMap.contains(index) ? m_itemMap[index]->polygon() : QPolygon();
102 if (!m_diagram->model()->hasIndex(row, column, m_diagram->rootIndex()))
104 const QModelIndex index = m_diagram->model()->index(row, column, m_diagram->rootIndex());
105 return m_itemMap.contains(index) ? m_itemMap[index]->polygon().boundingRect() : QRectF();
111 m_scene->addItem(item);
112 m_itemMap.insert(m_diagram->model()->index(item->
row(), item->
column(), m_diagram->rootIndex()), item);
130 QPointF ossfet(-0.5 * diameter.width(), -0.5 * diameter.height());
131 path.addEllipse(QRectF(location + ossfet, diameter));
132 addPolygon(row, column, QPolygonF(path.toFillPolygon()));
139 addCircle(row, column, from, QSizeF(1.5, 1.5));
147 if (from.x() < to.x()) {
154 const QPointF lineVector(right - left);
155 const qreal lineVectorLength = sqrt(lineVector.x() * lineVector.x() + lineVector.y() * lineVector.y());
156 const QPointF lineVectorUnit(lineVector / lineVectorLength);
157 const QPointF normOfLineVectorUnit(-lineVectorUnit.y(), lineVectorUnit.x());
159 const QPointF one(left - lineVectorUnit + normOfLineVectorUnit);
160 const QPointF two(left - lineVectorUnit - normOfLineVectorUnit);
161 const QPointF three(right + lineVectorUnit - normOfLineVectorUnit);
162 const QPointF four(right + lineVectorUnit + normOfLineVectorUnit);
163 addPolygon(row, column, QPolygonF() << one << two << three << four);
AbstractDiagram defines the interface for diagram classes.
Graphics item used inside of the ReverseMapper.
QModelIndexList indexesIn(const QRect &rect) const
void setDiagram(AbstractDiagram *diagram)
void addItem(ChartGraphicsItem *item)
QPolygonF polygon(int row, int column) const
void addCircle(int row, int column, const QPointF &location, const QSizeF &diameter)
void addLine(int row, int column, const QPointF &from, const QPointF &to)
void addRect(int row, int column, const QRectF &rect)
QRectF boundingRect(int row, int column) const
void addPolygon(int row, int column, const QPolygonF &polygon)
QModelIndexList indexesAt(const QPointF &point) const