Нарисуйте точку на QChart
Я пытаюсь нарисовать точку, где я нажимаю на QChart. Для этого я создал класс ChartWidget, который наследует QChart, и переопределил метод рисования следующим образом:
void ChartWidget::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget)
{
QtCharts::QChart::paint(painter, option, widget);
if (_pointToDraw != nullptr)
{
std::cout << "Drawing point" << std::endl;
QPen pen;
pen.setColor(QColor(255, 0, 0, 255));
pen.setWidth(3);
painter->setPen(pen);
painter->drawPoint(*_pointToDraw);
delete _pointToDraw;
_pointToDraw = nullptr;
}
}
void ChartWidget::mousePressEvent(QGraphicsSceneMouseEvent *event)
{
std::cout << "Clicked at " << event->pos().x() << "/" << event->pos().y() << std::endl;
_pointToDraw = new QPointF(event->pos());
update();
}
Кажется, что точка нарисована, но за диаграммой, потому что я вижу ее, только когда нажимаю за пределами графика, как на этом скриншоте:
Если я нажму на середину графика, то ничего не будет нарисовано.
Любая идея о том, что я делаю неправильно и как я могу это исправить?
1 ответ
Решение
Как вы указали, QChart рисует только фон, основная функция QChart - сохранить конфигурацию чертежа как тему, тип диаграммы и т. Д. Таким образом, вы не можете отобразить кнопку. Обходной путь должен создать QGraphicsEllipseItem:
class ChartWidget: public QChart
{
public:
ChartWidget(QGraphicsItem *parent = nullptr, Qt::WindowFlags wFlags = Qt::WindowFlags()):
QChart(parent, wFlags), item(new QGraphicsEllipseItem(QRectF(-3, -3, 6, 6)))
{
const QColor color(255, 0, 0, 255);
item->setZValue(100);
QPen pen(color);
pen.setWidth(3);
item->setBrush(color);
item->setPen(pen);
}
protected:
void mousePressEvent(QGraphicsSceneMouseEvent *event)
{
if(!item->scene()) scene()->addItem(item);
item->setPos(event->scenePos());
QChart::mousePressEvent(event);
}
private:
QGraphicsEllipseItem *item;
};