Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Qt QXYSeries和图表视图-修改悬停行为以在一定范围内触发_C++_Qt_Qtcharts - Fatal编程技术网

C++ Qt QXYSeries和图表视图-修改悬停行为以在一定范围内触发

C++ Qt QXYSeries和图表视图-修改悬停行为以在一定范围内触发,c++,qt,qtcharts,C++,Qt,Qtcharts,我有一个由QXYSeries表示的散点图,并使用QtCharts 5.7中的图表视图进行查看 我想将鼠标悬停在绘图上,将触发器“悬停”在一定距离内,而不是仅当光标直接位于点的顶部时。想象一下鼠标周围有一个圆圈,只要鼠标内有任何部分,鼠标就会触发悬停 有没有办法获得这种行为?最终,我通过创建一个继承自QChartView的类并重写mouseMoveEvent(QMouseEvent*event)从而获得了这种行为: void ScatterView::mouseMoveEvent(QMouseEv

我有一个由QXYSeries表示的散点图,并使用QtCharts 5.7中的图表视图进行查看

我想将鼠标悬停在绘图上,将触发器“悬停”在一定距离内,而不是仅当光标直接位于点的顶部时。想象一下鼠标周围有一个圆圈,只要鼠标内有任何部分,鼠标就会触发悬停


有没有办法获得这种行为?

最终,我通过创建一个继承自QChartView的类并重写
mouseMoveEvent(QMouseEvent*event)
从而获得了这种行为:

void ScatterView::mouseMoveEvent(QMouseEvent* event)
{
    if(!this->chart()->axisX() || !this->chart()->axisY())
    {
        return;
    }
    QPointF inPoint;
    QPointF chartPoint;
    inPoint.setX(event->x());
    inPoint.setY(event->y());
    chartPoint = chart()->mapToValue(inPoint);
    handleMouseMoved(chartPoint);
}

void ScatterView::handleMouseMoved(const QPointF &point)
{
    QPointF mousePoint = point;
    qreal distance(0.2); //distance from mouse to point in chart axes
    foreach (QPointF currentPoint, scatterSeries->points()) { 
        qreal currentDistance = qSqrt((currentPoint.x() - mousePoint.x())
                                      * (currentPoint.x() - mousePoint.x())
                                      + (currentPoint.y() - mousePoint.y())
                                      * (currentPoint.y() - mousePoint.y()));
        if (currentDistance < distance) {
            triggerPoint(currentPoint);
        }
    }
}
void ScatterView::mouseMoveEvent(QMouseEvent*event)
{
如果(!this->chart()->axisX()| |!this->chart()->axisY())
{
返回;
}
QPointF-inPoint;
QPointF chartPoint;
setX(事件->x());
setY(事件->y());
chartPoint=chart()->mapToValue(输入点);
移动手提箱(chartPoint);
}
无效散点视图::移动了把手(常数点和点)
{
QPointF鼠标点=点;
qreal距离(0.2);//鼠标到图表轴上点的距离
foreach(QPointF currentPoint,scatterSeries->points()){
qreal currentDistance=qSqrt((currentPoint.x()-mousePoint.x())
*(currentPoint.x()-mousePoint.x())
+(currentPoint.y()-mousePoint.y())
*(currentPoint.y()-mousePoint.y());
如果(当前距离<距离){
触发点(currentPoint);
}
}
}

最终,我通过创建一个继承自QChartView的类并重写
mouseMoveEvent(QMouseEvent*event)
从而实现了这种行为:

void ScatterView::mouseMoveEvent(QMouseEvent* event)
{
    if(!this->chart()->axisX() || !this->chart()->axisY())
    {
        return;
    }
    QPointF inPoint;
    QPointF chartPoint;
    inPoint.setX(event->x());
    inPoint.setY(event->y());
    chartPoint = chart()->mapToValue(inPoint);
    handleMouseMoved(chartPoint);
}

void ScatterView::handleMouseMoved(const QPointF &point)
{
    QPointF mousePoint = point;
    qreal distance(0.2); //distance from mouse to point in chart axes
    foreach (QPointF currentPoint, scatterSeries->points()) { 
        qreal currentDistance = qSqrt((currentPoint.x() - mousePoint.x())
                                      * (currentPoint.x() - mousePoint.x())
                                      + (currentPoint.y() - mousePoint.y())
                                      * (currentPoint.y() - mousePoint.y()));
        if (currentDistance < distance) {
            triggerPoint(currentPoint);
        }
    }
}
void ScatterView::mouseMoveEvent(QMouseEvent*event)
{
如果(!this->chart()->axisX()| |!this->chart()->axisY())
{
返回;
}
QPointF-inPoint;
QPointF chartPoint;
setX(事件->x());
setY(事件->y());
chartPoint=chart()->mapToValue(输入点);
移动手提箱(chartPoint);
}
无效散点视图::移动了把手(常数点和点)
{
QPointF鼠标点=点;
qreal距离(0.2);//鼠标到图表轴上点的距离
foreach(QPointF currentPoint,scatterSeries->points()){
qreal currentDistance=qSqrt((currentPoint.x()-mousePoint.x())
*(currentPoint.x()-mousePoint.x())
+(currentPoint.y()-mousePoint.y())
*(currentPoint.y()-mousePoint.y());
如果(当前距离<距离){
触发点(currentPoint);
}
}
}