当我的QtChart中鼠标悬停在系列上时,我需要显示一个小弹出窗口。
Highcharts(Javascript)有一些非常好的例子,比如这个:
如何实施此QtCharts?
我找不到任何关于实现弹出窗口的文档。
答案 0 :(得分: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 *)函数,并始终针对所有数据点检查鼠标位置并调整弹出窗口(显示/隐藏,定位)。如果你有很多点会很慢,所以我使用空间网格并最初将数据点分配给网格单元格。然后,您只需要检查鼠标位置周围网格单元格内的点。
我没有找到更好的解决方案。