Нарисуйте точку на QChart - PullRequest
       33

Нарисуйте точку на QChart

0 голосов
/ 20 февраля 2019

Я пытаюсь нарисовать точку, где я нажимаю 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();
}

Кажется, что точка рисуется, но за диаграммой, потому что я могу видеть ее только тогда, когдаЯ щелкаю только за пределами графика, как на этом скриншоте:

Screenshot

Если я щелкаю в середине графика, ничто не отображается.

Любая идеячто я делаю не так и как я могу это исправить?

1 Ответ

0 голосов
/ 20 февраля 2019

Как вы указали, 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;
};
...