我在图表上有一个带有5分的lineseries的qtchart。我可以在axisX和axisY的min和max内的x和y轴上拖动这些点。 如何禁用x轴上的点拖动?因此可以在图表上垂直拖动点。这是我的代码:
ChartView {
id: chart
property var selectedPoint: undefined
anchors.fill: parent
antialiasing: true
property real toleranceX: 0.05
property real toleranceY: 0.05
ValueAxis {
id: axisX
min: 0
max: 5
}
ValueAxis {
id: axisY
min: -10
max: 10
}
LineSeries {
id: series1
axisX: axisX
axisY: axisY
pointsVisible: true
}
MouseArea {
anchors.fill: parent
onPressed:
{
var cp = chart.mapToValue(Qt.point(mouse.x,mouse.y));
for(var i = 0;i < series1.count;i ++)
{
var p = series1.at(i);
if(Math.abs(cp.x - p.x) <= chart.toleranceX && Math.abs(cp.y - p.y) <= chart.toleranceY)
{
chart.selectedPoint = p;
break;
}
}
}
onPositionChanged: {
if(chart.selectedPoint != undefined) {
var p = Qt.point(mouse.x, mouse.y);
var cp = chart.mapToValue(p);
if(cp.x >= axisX.min && cp.x <= axisX.max && cp.y >= axisY.min && cp.y <= axisY.max) {
series1.replace(chart.selectedPoint.x, chart.selectedPoint.y, cp.x, cp.y);
chart.selectedPoint = cp;
}
}
}
onReleased: {
chart.selectedPoint = undefined;
}
}
}
// Add data to the series
Component.onCompleted: {
for (var i = 0; i <= 5; i++) {
series1.append(i, Math.random());
}
}
到目前为止,我可以通过将onPositionChanged
更改为以下代码来禁用x轴上的拖动,在这种情况下点3,但是有两个问题,首先这只是一个点,第二个,它不会禁用完全拖动该点可以在x轴上拖动2到4之间但不能拖动到此范围之外。
onPositionChanged: {
if(chart.selectedPoint != undefined) {
var p = Qt.point(mouse.x, mouse.y);
var cp = chart.mapToValue(p);
if(cp.x >= axisX.min && cp.x <= axisX.max && cp.y >= axisY.min && cp.y <= axisY.max) {
if (Math.round(cp.x) == 3){
series1.replace(chart.selectedPoint.x, chart.selectedPoint.y, cp.x, cp.y);
chart.selectedPoint = cp;
}
}
}
}