【问题标题】:Is it possible to create a sliding x-axis using QtCharts as done in Qwt?是否可以像在 Qwt 中那样使用 QtCharts 创建滑动 x 轴?
【发布时间】: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
            }
        }
    }
}

【问题讨论】:

    标签: qt qml qt5 qtcharts


    【解决方案1】:

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

    您可以通过 Qt Creator > Welcome > Examples...找到它 输入过滤器“图表”,您会在其他有趣的旁边找到它。

    【讨论】:

    • 谢谢。通过将缓动曲线设置为线性,我确实对示例进行了一些小调整,这可能对其他人有用。
    猜你喜欢
    • 2021-09-19
    • 1970-01-01
    • 1970-01-01
    • 2017-12-26
    • 2020-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多