是否可以像在 Qwt 中那样使用 QtCharts 创建滑动 x 轴?

Is it possible to create a sliding x-axis using QtCharts as done in Qwt?

我正在将一个使用 Qwt 绘图的项目迁移到 QtCharts。我开始测试 QtCharts,发现我无法像在 Qwt 中那样创建 "sliding" 的 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
            }
        }
    }
}

有可能。看看 dynamic spline example 轴在那里随着时间的推移而调整。

您可以通过 Qt Creator > 欢迎 > 示例找到它... 输入过滤器 "chart",您会在其他有趣的过滤器旁边找到它。