簡體   English   中英

QML,在運行時創建LineSeries

[英]QML, create LineSeries at runtime

我的目標是在運行時添加一個帶有可變數量LineSeries的QML ChartView 在用戶選擇並加載包含數據的文件之前,不知道需要添加多少LineSeries

我試圖在Repeater創建所有LineSeries ,沒有運氣。 我懷疑這是因為ChartView不知道如何處理一堆Item 由於Repeater不能在QObject上運行,因此不可能讓Repeater直接創建LineSeries

Repeater {
    model: numberOfColumnsInModel / 2

    delegate: Item {
        LineSeries {
            id: lineSeries
            axisX: xAxis
            axisY: yAxis

            VXYModelMapper {
                id: modelMapper
                model: lineChart.model //Reimplemented QAbstractTableModel
                xColumn: index * 2
                yColumn: index * 2 + 1
            }

            onHovered: {
                console.log("Do something...");
            }
        }
    }
}

在我看到的在線示例中,每個LineSeries都是硬編碼的 - 一次是ChartView每一行 - 對我ChartView

使用強制文檔,Luke。 在下面的示例中,在啟動時創建隨機點數的隨機計數:

import QtQuick 2.7
import QtQuick.Window 2.2
import QtQuick.Controls 2.0
import QtCharts 2.1

Window {
    id: window1
    title: "Chart test"
    visible: true
    width: 600
    height: 400

    ChartView {
        id: chart
        anchors.fill: parent
        axes: [
            ValueAxis{
                id: xAxis
                min: 1.0
                max: 10.0
            },
            ValueAxis{
                id: yAxis
                min: 0.0
                max: 10.0
            }
        ]
        Component.onCompleted: {
            var seriesCount = Math.round(Math.random()* 10);
            for(var i = 0;i < seriesCount;i ++)
            {
                var series = chart.createSeries(ChartView.SeriesTypeLine, "line"+ i, xAxis, yAxis);
                series.pointsVisible = true;
                series.color = Qt.rgba(Math.random(),Math.random(),Math.random(),1);
                series.hovered.connect(function(point, state){ console.log(point); }); // connect onHovered signal to a function
                var pointsCount = Math.round(Math.random()* 20);
                var x = 0.0;
                for(var j = 0;j < pointsCount;j ++)
                {
                    x += (Math.random() * 2.0);
                    var y = (Math.random() * 10.0);
                    series.append(x, y);
                }
            }
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM