2

当鼠标悬停在我的 QtChart 中的系列上时,我需要显示一个小弹出窗口。

Highcharts (Javascript) 有一些非常好的例子,比如这个:

在此处输入图像描述

我怎样才能实现这个 QtCharts?

我找不到任何关于实现弹出窗口的文档。

4

1 回答 1

3

据我所知,你必须自己做。我需要完全相同,并使用了一个嵌入在 QGraphicsProxyWidget 中的简单 QWidget,我将它添加到图表视图的 QGraphicsScene 中。

QWidget *popup = new MyPopUpWidget;
QChartView v;
QGraphicsProxyWidget *proxy = v.scene()->addWidget(popup);

// if you want a drop shadow you can use QGraphicsDropShadowEffect
QGraphicsDropShadowEffect* shadow   = new QGraphicsDropShadowEffect();
shadow->setOffset(0, 4);
shadow->setBlurRadius(8);
proxy->setGraphicsEffect(shadow);

虽然这很简单,但弹出窗口的定位是实际工作。所有简单的解决方案对我来说都不够好。例如,如果您的鼠标点击 QGraphicsItem(图表的所有行项都是 QGraphicsItems),就会有信号,但它们通常很小,您只想对实际数据点做出反应,而不是对线段做出反应。

您可以覆盖 mouseMove(QMouseMoveEvent *) 函数,并始终根据所有数据点检查鼠标位置并调整弹出窗口(显示/隐藏、定位)。如果你有很多点会很慢,所以我最初使用空间网格并将数据点分配给网格单元。然后,您只需要检查鼠标位置周围网格单元格内的点。

我没有找到更好的解决方案。

于 2016-09-02T07:50:18.280 回答