Диаграмма QML интерактивная

У меня есть круговая диаграмма, созданная динамически, которая использует функцию createPieChart(), описанную ниже. При щелчке по срезу я хочу вызвать функцию для вывода метки и значения этого среза.

Я сталкиваюсь с 2 проблемами:

  1. Хотя я подключаю сигналы "нажал" или "нажал" или "отпустил", слот не доходит. Я использую qtcharts 2.0 (сейчас не могу обновить).
  2. Я могу подключить «зависший» сигнал, но без передачи каких-либо параметров, поэтому я не знаю, в каком срезе я нахожусь.

Это другие функции:

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);
 }

Есть идеи, как это сделать? Спасибо!


person laurapons    schedule 21.09.2017    source источник
comment
Видимо не я один сталкиваюсь с этой проблемой. Сигнал clicked() также не запускается в этом сообщении: заголовок stackoverflow.com/questions/40626911/   -  person laurapons    schedule 21.09.2017


Ответы (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)}
}
person laurapons    schedule 27.09.2017