我正在迁移一个使用 Qwt 绘制到 QtCharts 的项目。我开始测试QtCharts,发现我无法创建一个像Qwt那样"滑动"的x轴。从文档中,我无法看到这以任何方式得到支持。
有谁知道如何使用Qt图表做到这一点?可能吗?如何从头开始创建它?
我附上了两个视频,说明它在Qwt中的样子以及到目前为止我在QtCharts中所做的工作。
- Qwt 示例
- Qt图表示例
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
}
}
}
}
这是可能的。查看动态样条示例 轴在那里随着时间的推移而调整。
您可以通过Qt Creator找到它>欢迎>示例... 输入过滤器"图表",您会在其他有趣的过滤器旁边找到它。