gpt4 book ai didi

qt - 在qml中的qt图表上拖动一个点

转载 作者:行者123 更新时间:2023-12-04 18:33:30 28 4
gpt4 key购买 nike

我正在尝试在 qtcharts 上的 LineSeries 上拖动一个点。这是我的代码:

import QtQuick 2.0
import QtCharts 2.0

Item {
anchors.fill: parent

ChartView {
title: "Two Series, Common Axes"
anchors.fill: parent

ValueAxis {
id: axisX
min: 0
max: 10
tickCount: 5
}

ValueAxis {
id: axisY
min: -0.5
max: 1.5
}

LineSeries {
id: series1
axisX: axisX
axisY: axisY
onPressed: console.log("Pressed: " + point.x + ", " + point.y);
onReleased: console.log("Released: " + point.x + ", " + point.y);
}


}
// Add data dynamically to the series
Component.onCompleted: {
for (var i = 0; i <= 10; i++) {
series1.append(i, Math.random());
}
}
}

当我按下 Lineserie 上的一个点时,我可以看到我在控制台中按下和释放的点的 x,y。两者都是一样的,所以我看不到它发布的地方。我想将一个点拖到另一个地方,所以如果我按下一个点,它会跟随(触摸屏上的鼠标/手指)指针,直到我在图表上松开为止。任何人都可以帮助我从哪里开始以及我应该使用哪些属性?

最佳答案

不幸的是两者ChartViewLineSeries没有 MouseMove 事件,因此很难跟踪拖动事件。我有一个使用 MouseArea 放置在图表上的解决方法。也许是一个愚蠢的解决方案,但至少它有效。我已经将它用于您的示例:

ChartView {
id: chart
property var selectedPoint: undefined
title: "Two Series, Common Axes"
anchors.fill: parent
antialiasing: true
property real toleranceX: 0.05
property real toleranceY: 0.05

ValueAxis {
id: axisX
min: 0
max: 10
tickCount: 5
}

ValueAxis {
id: axisY
min: -0.5
max: 1.5
}

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 dynamically to the series
Component.onCompleted: {
for (var i = 0; i <= 10; i++) {
series1.append(i, Math.random());
}
}

关于qt - 在qml中的qt图表上拖动一个点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48789849/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com