Qt QCharts裁剪为矩形并使用水平滚动

Qt QCharts裁剪为矩形并使用水平滚动,qt,qt5,qtcharts,qchart,qchartview,Qt,Qt5,Qtcharts,Qchart,Qchartview,我正在尝试实现一个自定义图,它脱离了QtCharts Callout示例。我想将图表的选择限制在特定区域,并使其能够在水平滚动的同时仍显示轴值 下面是我正在使用的类 这里有一个例子来说明我的意思 假设我想要选择区域point1=(5,0)point2=(15,8),区域是一个QRect(point1,point2) 应渲染图形中的所有点,但我希望能够侧向滚动并保持y_轴在视图中。一种可能的解决方案是覆盖MousePresseEvent和mouseMoveEvent方法以应用滚动,并

我正在尝试实现一个自定义图,它脱离了QtCharts Callout示例。我想将图表的选择限制在特定区域,并使其能够在水平滚动的同时仍显示轴值

下面是我正在使用的类

这里有一个例子来说明我的意思

假设我想要选择区域point1=(5,0)point2=(15,8),区域是一个QRect(point1,point2)


应渲染图形中的所有点,但我希望能够侧向滚动并保持y_轴在视图中。

一种可能的解决方案是覆盖MousePresseEvent和mouseMoveEvent方法以应用滚动,并在必要时使用轴范围进行校正:

#包括
#包括
#包括
QT\u图表\u使用\u命名空间
类图表视图:公共图表视图{
公众:
使用QChartView::QChartView;
无效设置范围(qreal xmin、qreal xmax、qreal ymin、qreal ymax){
如果(!chart())返回;
if(QValueAxis*xaxis=qobject_cast(chart()->轴(Qt::Horizontal).first()){
xaxis->setRange(xmin,xmax);
}
if(QValueAxis*yaxis=qobject_cast(chart()->轴(Qt::Vertical).first()){
yaxis->setRange(ymin,ymax);
}
}
无效设置限制(qreal最小值、qreal最大值、Qt::方向){
m_极限_min=min;
m_limit_max=max;
m_方向=方向;
}
受保护的:
作废鼠标压力事件(QMouseEvent*事件)
{
如果(事件->按钮()==Qt::LeftButton&&chart())
m_lastMousePos=maptosene(事件->位置());
QGraphicsView::MousePresseEvent(事件);
}
作废mouseMoveEvent(QMouseEvent*事件)
{
if(事件->按钮()&Qt::LeftButton&&chart()){
QPointF newValue=maptosene(事件->位置());
QPointF delta=newValue-m_lastMousePos;
如果(m_方向==Qt::水平)
chart()->滚动(-delta.x(),0);
其他的
chart()->滚动(0,-delta.y());
如果(QValueAxis*axis=qobject_cast(图表()->轴(m_方向).first()){
qreal deltaX=轴->最大值()-轴->最小值();
如果(轴->最小值()设置范围(m_限制_最小值,m_限制_最小值+deltaX);
}
否则如果(轴->最大值()>m_极限值){
轴->设置范围(m_限制\u最大值-deltaX,m_限制\u最大值);
}
}
m_lastMousePos=newValue;
}
QGraphicsView::mouseMoveEvent(事件);
}
私人:
QPointF m_lastMousePos;
qreal m_limit_min;
qreal m_limit_max;
Qt::方向m_方向;
};
int main(int argc,char*argv[])
{
质量保证申请a(argc、argv);
海图海图;
SetRenderInt(QPaint::抗锯齿);
图表视图。调整大小(640480);
QLineSeries*系列=新的QLineSeries();
系列->附加(0,6);
系列->附加(2,4);
系列->附加(3,8);
系列->附加(7,4);
系列->附加(10,5);

*系列你所说的选择是什么意思?你是说用户手动进行选择或只是创建一个方法来进行选择。你所说的水平滚动是什么意思?你想要一个滚动条还是只是拖动鼠标?我只想创建一个方法来进行选择。并且只需拖动鼠标。