QML图表互动

时间:2017-09-21 14:26:53

标签: charts qml interactive signal-handling

我有一个动态创建的饼图,它使用下面描述的函数createPieChart()。单击切片时,我想调用一个函数来打印出该切片的标签和值。

我面临两个问题:

  1. 虽然我连接了“已点击”或“已按下”或“已释放”信号,但未到达插槽。我正在使用qtcharts 2.0(我现在无法更新)。
  2. 我能够连接“悬停”信号,但没有传递任何参数,所以我不知道我进入了什么片段。
  3. 这些是其他功能:

    function createPieChart(data){
        pieserieschart.clear();
        slices.splice(0, slices.length) //clear slices array
    
        for (var prop in data) {
            slices.unshift(pieserieschart.append(prop, data[prop]));
    
            //I get "Cannot read property 'label' of undefined using this method
            slices[0].hovered.connect(function(){mouseHoverSlice(slices[0].label));
    
            //WORKS, but I want to pass the label of that slice (and the value if possible)
            slices[0].hovered.connect(mouseHoverSlice); 
    
            //it is not working at all
            slices[i].clicked.connect(sliceClicked);
        }
    
    
     function sliceClicked(){
         console.log("Slice Clicked"); //I cannot see this printed
     }
    
     function mouseHoverSlice(info){
         console.log("Slice hover: " + info);
     }
    

    知道怎么做吗?谢谢!

1 个答案:

答案 0 :(得分:1)

升级到QtCharts 2.2后,我能够像这样解决它: 对于馅饼&线和&散点图,我使用了onClicked,它返回切片/点。因此,在动态创建切片或点时,您无需连接任何信号。

对于条形图,我能够连接创建的小册子

var barvalues = barserieschart.append("label",values)
barvalues.clicked.connect(barClicked)

...

ChartView {
        PieSeries {id: pieserieschart; onClicked: sliceClicked(slice) }
        BarSeries {id: barserieschart }
        ScatterSeries{id: scatterserieschart; onClicked: scatterclicked(point)}
}