【发布时间】:2019-08-08 15:24:51
【问题描述】:
我正在将一个使用 Qwt 绘图的项目迁移到 QtCharts。我开始测试 QtCharts,发现我无法创建像 Qwt 中那样“滑动”的 x 轴。从文档中我看不出它以任何方式得到支持。
有谁知道如何用 Qt Charts 做到这一点?可能吗?如何从头开始创建它?
我附上了两个视频,介绍了在 Qwt 中的样子以及到目前为止我在 QtCharts 中所做的事情。
QtCharts 示例的代码如下所示
import QtQuick 2.12
import QtCharts 2.3
import QtQuick.Controls 2.12
import QtQml 2.12
ApplicationWindow {
visible: true
width: 640
height: 480
title: qsTr("Chart test")
ChartView {
id: chartView
readonly property var startDate: new Date('1995-12-17T03:20:00')
anchors.fill: parent
antialiasing: true
// The number of vertical tick lines to scroll to the right
function scrollTicksRight(ticks) {
chartView.scrollRight(axisX.tickDistance() * ticks)
}
Timer {
property real hz: 25
property real period: 1 / hz
property real periodMs: period * 1000
property int counter: 0
property real sinusStep: 0
function generateAndAppendPoint() {
let x = chartView.startDate.getTime() + counter
let y = 5 * Math.cos(sinusStep) + 5
splineSeries.append(x, y)
counter += periodMs
sinusStep += 0.1
if (x > axisX.max)
chartView.scrollRight(10)
}
interval: periodMs
running: true
repeat: true
onTriggered: generateAndAppendPoint()
}
SplineSeries {
id: splineSeries
name: "Example Series"
useOpenGL: true
function newestPoint() {
return splineSeries.at(splineSeries.count - 1)
}
axisX: DateTimeAxis {
id: axisX
// The distance between two vertical tick lines
function tickDistance() {
return (chartView.plotArea.width / (axisX.tickCount - 1))
}
// Remove points that are no longer visible
function removeOldPoints() {
let pointsToRemove = 0
let size = splineSeries.count
for (let i = 0; i < size; i++) {
if (splineSeries.at(i).x < min)
pointsToRemove++
else
break
}
splineSeries.removePoints(0, pointsToRemove)
}
tickCount: 11
format: "yyyy-MM-dd hh:mm:ss"
min: chartView.startDate
max: new Date(chartView.startDate.getTime() + 10000)
onMinChanged: removeOldPoints()
}
axisY: ValueAxis {
min: 0
max: 10
}
}
}
}
【问题讨论】: