gpt4 book ai didi

c++ - 在 QChart 上画一个点

转载 作者:太空宇宙 更新时间:2023-11-04 12:39:46 24 4
gpt4 key购买 nike

我正在尝试在单击 QChart 的位置绘制一个点。为此,我创建了一个“ChartWidget”类,它继承了 QChart 并像这样覆盖了 paint 方法:

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

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

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

最佳答案

正如你指出的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;
};

关于c++ - 在 QChart 上画一个点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54776996/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com