如何在QML中获得右侧轴

时间:2017-04-21 13:07:49

标签: c++ qt charts qml

我想在QML ChartView中动态更改LineSeries。我正在使用Qt 5.7 为此,我有一个变量'updateChart',它使用removeAllSeries()和createSeries()

触发替换现有的LineSeries

有时,需要使用辅助轴(右轴)显示LineSeries。 ChartView createSeries()不允许为LineSeries分配一个右轴,从文档中我找不到替代方案。

此外,在调用createSeries方法之前,您需要已经有一个轴。 因此,我在ChartView中声明了3个轴(X,Y left,Y right),以便在createSeries调用中使用它们。最小/最大值在另一个视图中修改并保存在'chartContext'中。 创建后,我将axisY更改为axisYRight。

问题是我的ChartView在两侧显示相同的轴(最小/最大值)。当我更改其中一个最小值/最大值时,它会更新到最后一个值,甚至将左轴的最小值与右轴的最大值混合。

我该如何避免这种情况? 以下是我的(缩短的)代码: chartContext和dataModel是C ++上下文

ChartView 
{
  id: linechart;
  anchors.fill: parent;

  property var updateChart: chartContext.updateChart;

  title: chartContext.chartTitle;
  antialiasing: true;

  ValueAxis {
      id: xAxis;
      min: chartContext.minXAxis;
      max: chartContext.maxXAxis;           
  }
  ValueAxis {
      id: yAxis;
      min: chartContext.minYAxis;
      max: chartContext.maxYAxis;
  }
  ValueAxis {
      id: yAxis2;
      min: chartContext.minYAxis2;
      max: chartContext.maxYAxis2;
  }

  onUpdateChartChanged: {
      linechart.removeAllSeries();

      for (var i = 0; i < dataModel.numberOfSeries; ++i) {          
          var lineSeries;
          if (dataModel.axisLocation(i) == "Right") {
              lineSeries = linechart.createSeries(ChartView.SeriesTypeLine, dataModel.getYLabel(i), xAxis);
              lineSeries.axisYRight = yAxis2;
          }
          else {
              lineSeries = linechart.createSeries(ChartView.SeriesTypeLine, dataModel.getYLabel(i), xAxis, yAxis);
          }         
      }
  }
}

0 个答案:

没有答案