首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在QChart上绘制点

在QChart上绘制点
EN

Stack Overflow用户
提问于 2019-02-20 08:28:31
回答 1查看 999关注 0票数 1

我正在尝试在单击QChart的位置绘制一个点。为此,我创建了一个继承QChart并覆盖paint方法的"ChartWidget“类,如下所示:

代码语言:javascript
复制
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();
}

这个点似乎是在图表后面绘制的,因为我只有在图表外部单击时才能看到它,如下面的屏幕截图所示:

如果我在图表中间单击,则看不到任何内容。

你知道我做错了什么吗?我该如何解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-20 09:05:10

由于您指出QChart只绘制背景,QChart的主要功能是将绘图的配置保存为主题、图表类型等,所以您不能显示该按钮。解决方法是创建一个QGraphicsEllipseItem:

代码语言:javascript
复制
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;
};
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54776996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档