2017-10-09 145 views
0

所以我有一个动态变化的饼图。我想显示鼠标移动到切片上时每个切片的值,但我不确定如何在触发onHovered时创建工具提示。我用QML动态创建工具提示

QT 5.9.1 &进口QtQuick.Controls 2.2

更新:我加入一些代码来解释我是如何创建的切片。 下面是代码:

function onUpdateValues(values){ 
    switch(values.type){ 
      case PIE_CHART: 
       createPieChart(values.data); 
       break; 
      ... 
      default: 
       console.debug("CHART TYPE ERROR"); 
       break; 
      } 
    } 
} 

function createPieChart(data){ 
    pieserieschart.clear(); 
    for (var prop in data) { 
     var new_slice = pieserieschart.append(prop, data[prop]); 
     new_slice.tooltip = prop + ": " + data[prop] 
     //I tried using hovered signal (and without), but it's not doing any difference 
     new_slice.hovered.connect(function(state) { new_slice.tooltip.visible = state }) 
     //If I replace the above line by the next one, I can see the console.log info, but the tooltip is not enabled 
     new_slice.hovered.connect(function(state) { sliceHovered(new_slice, state) }) 

    } 
} 

function sliceHovered(slice, value){ 
    slice.enabled = true 
    console.log("Slice hovered: " + slice.tooltip + " " + value) 
} 

ChartView { /* Chart */ 
    id:chartView 

    PieSeries { 
     id: pieserieschart; 
     size: 1; 
     holeSize: 0.55; 
     onClicked: sliceClicked(slice); 
    } 
} 

我能看到的console.log,但我没能看到提示,以及应用程序的输出不显示任何错误,但提示没有触发

+0

哪里是 '切片' 定义? – sk2212

+0

动态地在一个函数中:function createPieChart(data){ pieserieschart.clear(); (var prop in data){ var new_slice = pieserieschart.append(prop,data [prop]); new_slice.tooltip = prop +“:”+ data [prop] } – laurapons

+0

我试过声明new_slice.tooltip,并且onHovered,我可以阅读slice.tooltip,但它不显示 – laurapons

回答

2

相关的文档:

实施例:

ChartView { 
    id: chartView 

    PieSeries { 
     onHovered: { 
      if (state) 
       chartView.ToolTip.show(slice.label + ":" + slice.value) 
      else 
       chartView.ToolTip.hide() 
     } 
    } 
} 
+0

谢谢!那正是我正在寻找的! :) – laurapons

+0

这个解决方案的问题是,工具提示位置总是一样的(从chartview顶部,我上面的片段)。如果工具提示出现在鼠标悬停或切片悬停的位置,这将是理想选择) – laurapons

+0

对不起,我对Qt Charts不够熟悉,但我猜目前没有办法查询PieSlice的位置。至少我不能发现任何与文档相关的东西。尽管如此,您可以创建一个小的C++帮助器并将其暴露给QML以使用'QCursor :: pos()'查询鼠标光标位置。 – jpnurmi